Advertisement
yicongli

HDU6390

Mar 12th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define ll long long
  8.  
  9. template<typename T>
  10. inline void read(T&x){
  11.     x=0;T k=1;char gc;
  12.     while(!isdigit(c)){if(c=='-')k=-1;gc;}
  13.     while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
  14. }
  15.  
  16. const int N=1e6+7;
  17.  
  18. int tot;
  19. int pri[N];
  20. int phi[N];
  21. int mu[N];
  22. bool mark[N];
  23.  
  24. inline void pre(int n){
  25.     mu[1]=phi[1]=1;
  26.     for(int i=2;i<=n;++i){
  27.         if(!mark[i])pri[++tot]=i,phi[i]=i-1,mu[i]=-1;
  28.         for(int j=1,tmp;j<=tot;++j){
  29.             if((tmp=i*pri[j])>n)break;
  30.             mark[tmp]=1;
  31.             if(i%pri[j]){
  32.                 phi[tmp]=phi[i]*phi[pri[j]];
  33.                 mu[tmp]=-mu[i];
  34.             }
  35.             else {
  36.                 phi[tmp]=phi[i]*pri[j];
  37.                 mu[tmp]=0;
  38.                 break;
  39.             }
  40.         }
  41.     }
  42. }
  43.  
  44. int inv[N];
  45.  
  46. int n,m,p;
  47.  
  48. int main(){
  49. //  freopen(".in","r",stdin);
  50. //  freopen(".out","w",stdout);
  51.     int T;r(T);
  52.     pre(1e6);
  53.     while(T--){
  54.         r(n),r(m),r(p);
  55.         if(n>m)swap(n,m);
  56.         inv[1]=1;
  57.         for(int i=2;i<=n;++i){
  58.             inv[i]=(ll)(p-p/i)*inv[p%i]%p;
  59.         }
  60.         ll ans=0;
  61.         for(int i=1;i<=n;++i){
  62.             int t1=m/i,t2=n/i;
  63.             int t=min(t1,t2);
  64.             ll sum=0;
  65.             for(int j=1;j<=t;++j){
  66.                 sum+=(ll)mu[j]*(t1/j)*(t2/j)%p;
  67.             }
  68.             sum=(sum%p+p)%p;
  69.             ans+=(ll)i*inv[phi[i]]%p*sum%p;
  70.         }
  71.         printf("%lld\n",ans%p);
  72.     }
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement