标签:
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9696 Accepted Submission(s): 3623
1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<string.h> 5 #include<stdlib.h> 6 #include<queue> 7 #include<math.h> 8 #include<vector> 9 using namespace std; 10 typedef long long LL; 11 bool prime[100005]; 12 int ans[100005]; 13 int flag[100005]; 14 int fen[100]; 15 int d[100005]; 16 LL oula[100005]; 17 int slove(int n,int m); 18 int main(void) 19 { 20 int i,j,k; 21 fill(ans,ans+100005,1); 22 fill(d,d+100005,1); 23 int c=0; 24 for(i=0; i<=100000; i++)oula[i]=i; 25 for(i=2; i<=100000; i++) 26 { 27 if(!prime[i]) 28 { 29 for(j=2; (i*j)<=100000; j++) 30 { 31 prime[i*j]=true; 32 ans[i*j]*=i; 33 d[i*j]=i; 34 } 35 } 36 } 37 oula[0]; 38 oula[1]=1; 39 for(i=2; i<=100000; i++) 40 { 41 if(!prime[i]) 42 { 43 ans[i]*=i; 44 d[i]=i; 45 for(j=1; (LL)i*(LL)j<=100000; j++) 46 { 47 oula[i*j]/=i; 48 oula[i*j]*=(i-1); 49 } 50 } 51 } 52 int s; 53 scanf("%d",&k); 54 LL sum=0; 55 int n,m; 56 for(i=2; i<=100000; i++)oula[i]+=oula[i-1]; 57 for(s=1; s<=k; s++) 58 { 59 sum=0; 60 int xx,yy,vv; 61 memset(flag,-1,sizeof(flag)); 62 scanf("%d %d %d %d %d",&xx,&n,&yy,&m,&vv); 63 if(vv>n||vv>m|vv==0) 64 { 65 printf("Case %d: ",s); 66 printf("0\n"); 67 } 68 else 69 { 70 if(n>m) 71 { 72 swap(n,m); 73 } 74 n/=vv; 75 m/=vv; 76 sum=0; 77 for(i=1; i<=n; i++) 78 { 79 if(flag[ans[i]]!=-1) 80 { 81 sum+=flag[ans[i]]; 82 } 83 else 84 { 85 flag[ans[i]]=slove(i,m); 86 sum+=flag[ans[i]]; 87 } 88 } 89 //printf("%lld %lld\n",oula[5],sum); 90 printf("Case %d: %lld\n",s,sum-oula[min(n,m)]+1); 91 } 92 } 93 return 0; 94 } 95 int slove(int n,int m) 96 { 97 int i,j,k; 98 int nn=n; 99 int cnt=0; 100 while(n>1) 101 { 102 fen[cnt++]=d[n]; 103 n/=d[n]; 104 } 105 int cc=1<<cnt; 106 LL sum=0; 107 int sum1=0; 108 for(i=1; i<cc; i++) 109 { 110 int ck=0; 111 int ak=1; 112 for(j=0; j<cnt; j++) 113 { 114 if(i&(1<<j)) 115 { 116 ak*=fen[j]; 117 ck++; 118 } 119 } 120 if(ck%2) 121 { 122 sum+=m/ak; 123 } 124 else sum-=m/ak; 125 } 126 return m-sum; 127 }
标签:
原文地址:http://www.cnblogs.com/zzuli2sjy/p/5766148.html