找区间[a,b]中所有与n互素的数字个数,思想也很简单,首先小小技巧:分别算出平[1,b]中与n互素的总个数,再减去[1,a-1]中与n互素的个数。其次,运用容斥原理,学长学姐说得好,加加减减总没错。由于系统崩盘了,此时的我不知道这代码是否已AC掉了,姑且相信自己一回吧,上天有眼。
#includeusing namespace std;int prime[50];long long ges(long num,int m){ long long ans=0,tmp,i,j,flag; for(i=1; i<(long long)(1< > c; for(int count = 1;count <= c;count++) { long long a,b,n; cin >> a >> b >> n; int index = 0; for(int i = 2; i * i<= n; i++) { if(n % i == 0) { prime[index++] = i; while(n % i == 0) { n /= i; } } } if(n>1) prime[index++]=n; long long ans=(b-ges(b,index))-(a-1-ges(a-1,index)); cout << "#case" << count << ": " << ans << endl; } return 0;}