蒟蒻求助,#3莫名RE
查看原帖
蒟蒻求助,#3莫名RE
99506
_LHF_楼主2021/2/6 15:59
#include<cstdio>
#define N 30000010
#define ll long long
using namespace std;
const ll K=1e7,mod=1e9+7;
ll f1,f2,f3,n,a,p[N],ans;
int vis[N],mu[N],len,T;
ll fastpow(ll a,ll b)
{
	a=(a+mod)%mod;
	b%=(mod-1);
	ll s=1;
	while(b)
	{
		if(b&1) s=s*a%mod;
		a=a*a%mod, b>>=1;
	}
	return s;
}
ll getphi(ll a)
{
	ll s=a;
	for(ll i=1;p[i]*p[i]<=a;i++)
		if(a%p[i]==0)
		{
			s=s/p[i]*(p[i]-1);
			while(a%p[i]==0) a/=p[i];
		}
	if(a>1) s=s/a*(a-1);
	return s%mod;
}
ll f(ll a)
{
	return (fastpow(f1-1,a)+(a%2?-1:1)*(f1-1)+mod)%mod;
}
int main()
{
	mu[1]=1;
	for(int i=2;i<=K;i++)
	{
		if(!vis[i]) p[++len]=i,mu[i]=-1;
		for(int j=1;i*p[j]<=K&&j<=len;j++)
		{
			vis[i*p[j]]=1;
			if(i%p[j]) mu[i*p[j]]=-mu[i];
			else break;
		}
	}
	for(int i=1;i<=K;i++) mu[i]+=mu[i-1];
	scanf("%d",&T);
	while(T--)
	{
		scanf("%lld%lld",&n,&a);
		f2=f3=ans=0;
		for(ll l=1,r;l<=a;l=r+1)
		{
			r=a/(a/l);
			f2=(f2+(a/l)*(a/l)%mod*(mu[r]-mu[l-1]+mod)%mod)%mod;
			f3=(f3+(a/l)*(a/l)%mod*(a/l)%mod*(mu[r]-mu[l-1]+mod)%mod)%mod;
		}
		f1=(f3+f2*3+2)%mod*fastpow(6,mod-2)%mod;
		for(ll i=1;i*i<=n;i++)
		{
			if(n%i) continue;
			ans=(ans+f(i)*getphi(n/i)%mod)%mod;
			if(i*i!=n) ans=(ans+f(n/i)*getphi(i)%mod)%mod;
		}
		printf("%lld\n",ans*fastpow(n,mod-2)%mod);
	}
}

请大佬帮忙

2021/2/6 15:59
加载中...