P1072 [NOIP2009 提高组] Hankson 的趣味题90分求救
查看原帖
P1072 [NOIP2009 提高组] Hankson 的趣味题90分求救
759152
yinbe楼主2024/2/16 19:56
#include<iostream>
using namespace std;
int a,b,c,d,T,prime[50005],cnt_prime,ma,mb,mc,md,cntx; 
long long ans=1;
bool is_prime(int n)
{
	if(n<2)
	{
		return false;
	}
	if(n==2)
	{
		return true;
	}
	for(long long i=2;i*i<=n;i++)
	{
		if(n%i==0)
		{
			return false;
		}
	}
	return true;
}
int count(int n,int p,int zhanwei1,int zhanwei2)
{
	int m=0;
	while(n%p==0)
	{
		n/=p;
		m++;
	}
	return m;
}
int main()
{
	
	scanf("%d",&T);
	for(int i=2;i*i<=2e9;i++)
	{
		if(is_prime(i))
		{
			prime[++cnt_prime]=i;
		}
	}
	while(T--)
	{
		ans=1;
		scanf("%d%d%d%d",&a,&c,&b,&d);
		for(int i=1;i<=cnt_prime;i++)
		{
			if(prime[i]>d)break;
			if(d%prime[i]!=0)continue;
			ma=count(a,prime[i],0,0);
			mb=count(b,prime[i],0,0);
			mc=count(c,prime[i],0,0);
			md=count(d,prime[i],0,0);
			if(ma>mc&&mb<md&&mc==md)cntx=1;
			else if(ma>mc&&mb==md&&mc<=md)cntx=1;
			else if(ma==mc&&mb<md&&mc<=md)cntx=1;
			else if(ma==mc&&mb==md&&mc<=md)cntx=md-mc+1;
			else cntx=0;
			ans*=cntx;
		}
		printf("%lld\n",ans);
	}
	return 0;
}
2024/2/16 19:56
加载中...