标签:content xxxxxx others first day time enter ber tin
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1699 Accepted Submission(s): 627
#include <bits/stdc++.h> #define pb push_back #define mp make_pair #define fi first #define se second #define all(a) (a).begin(), (a).end() #define fillchar(a, x) memset(a, x, sizeof(a)) #define huan printf("\n") #define debug(a,b) cout<<a<<" "<<b<<" "<<endl #define ffread(a) fastIO::read(a) using namespace std; typedef long long ll; typedef pair<int,int> pii; const int maxn=1e6+10,inf=0x3f3f3f3f; int check[maxn],phi[maxn],prime[maxn]; ll inv[maxn],f[maxn]; void philist() { int cnt=0; phi[1]=1; for(int i=2; i<=maxn; i++) { if(!check[i]) { prime[++cnt]=i; phi[i]=i-1; } for(int j=1; j<=cnt&&prime[j]*i<=maxn; j++) { check[i*prime[j]]=1; if(i%prime[j]) phi[i*prime[j]]=phi[i]*(prime[j]-1); else { phi[i*prime[j]]=phi[i]*prime[j]; break; } } } } void init(int mod,int n) { fillchar(f,0); inv[1]=1; for(int i=2;i<=n;i++) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod; } int main() { int t,n,m,p; scanf("%d",&t); philist(); while(t--) { scanf("%d%d%d",&n,&m,&p); ll ans=0; if(n>m) swap(n,m); init(p,n); for(ll i=n;i>=1;i--) //容斥求1-n,1-m中gcd为i的个数 { f[i]=(ll)(n/i)*(m/i); for(int j=i+i; j<=n; j+=i) //f[i]表示gcd为i的对数有f[i]个 f[i]=f[i]-f[j]; ans=(ans+f[i]%p*i%p*inv[phi[i]])%p; } printf("%lld\n",ans); } }
标签:content xxxxxx others first day time enter ber tin
原文地址:https://www.cnblogs.com/stranger-/p/9807329.html