WA求助,代码很短,有注释
查看原帖
WA求助,代码很短,有注释
930076
mmdxmakioi楼主2023/1/15 09:59
#include<cstdio>
#define int long long
int n;
int p[11];
int P;
int po[11];
int b[11];
int t[11];
int fast_pow(int a,int b,int MOD)
{
	int rt = 1;
	while(b!=0)
	{
		if(b%2==0)
		{
			rt *= a;
			rt %= MOD;
		}
		a *= a;
		a %= MOD;
		b/=2;
	}
	return rt;
}
int phi(int x)//求欧拉函数
{
	int rt = x;
	int i = 2,j;
	while(i*i<=x)
	{
		if(x%i==0)
		{
			rt = rt/i*(i-1);
			while(x%i==0)
			{
				x/=i;
			}
		}
		
		i++;
	}
	if(n>1)
	{
		rt = rt/n*(n-1);
	}
	return rt;
}
signed main()
{
	int i,j;
	scanf("%lld",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%lld%lld",&p[i],&b[i]);
	}
	P = 1;
	for(i=1;i<=n;i++)
	{
		P *= p[i];
	}
	for(i=1;i<=n;i++)
	{
		po[i] = P/p[i];
		t[i] = fast_pow(po[i],phi(p[i])-1,p[i]);//欧拉函数求逆元
	}
	int ans = 0;
	for(i=1;i<=n;i++)
	{
		ans += po[i]*t[i]*b[i];
		ans %= P;
	}
	printf("%lld",ans);
}
2023/1/15 09:59
加载中...