萌新求助,WA第二第三个点,P1072
查看原帖
萌新求助,WA第二第三个点,P1072
504549
sunwenbai楼主2022/8/24 23:03

使用李煜东的蓝书上的方法(p143~144)

#include<bits/stdc++.h>
#define ll long long int
using namespace std;
ll v[45000],p[4666],a,b,c,d,sum=0,n,tmp,ans=1;
void ss(ll nn)
{
	memset(v,0,sizeof(v));
	memset(p,0,sizeof(p));
	ll m=0;
	for(ll i=2;i<=nn;i++)
	{
		if(v[i]==0){v[i]=i;p[++m]=i;}
		for(ll j=1;j<=m;j++)
		{
			if(p[j]>v[i]||p[j]>nn/i)break;
			v[i*p[j]]=p[j];
		}
	}
}
//筛出根号2*10^9以内的质数
int main()
{
	ss(44722);
	p[4649]=0x7fffffff;
	cin>>n;
	for(ll ii=1;ii<=n;ii++)
	{
		cin>>a>>c>>b>>d;
		ll i=1;ans=1;
		while(p[i]<=d)
		{
			ll aq=0,bq=0,cq=0,dq=0;
			if(d%p[i]==0)
			{
				sum=0;
				tmp=a;while(tmp%p[i]==0){aq++;tmp/=p[i];}
				tmp=b;while(tmp%p[i]==0){bq++;tmp/=p[i];}
				tmp=c;while(tmp%p[i]==0){cq++;tmp/=p[i];}
				tmp=d;while(tmp%p[i]==0){dq++;tmp/=p[i];}
				if(aq>cq&&bq<dq&&cq==dq)sum=1;
				if(aq>cq&&bq==dq&&cq<=dq)sum=1;
				if(aq==cq&&bq<dq&&cq<=dq)sum=1;
				if(aq==cq&&bq==dq&&cq<=dq)sum=dq-cq+1;
				ans*=sum;
			}
			i++;
		}
		cout<<ans<<endl;
	}
	return 0;
}

各位神犇救救孩子罢(悲

2022/8/24 23:03
加载中...