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