您的位置:首页 > 其它

容斥例程 hdu 4135 Co-prime

2016-08-03 18:48 405 查看
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <cstring>
#define INF ((1<<31)-1)
using namespace std;
typedef long long llt;
int Factor[100000];
int fi = 0;
///计算质因子
void sieve( int n ){
fi = 0;
for (int i = 2;i*i <= n;++i){
if ( 0 == n%i ) Factor[fi++] = i;
while( 0 == n%i) n /= i;
}
if (n>1) Factor[fi++] = n;
}
int main(){
int t,kase(1);
scanf("%d",&t);
while(t--){
llt a,b,k;
scanf("%I64d%I64d%I64d",&a,&b,&k);
sieve(k);
//cout <<"fi : "<<fi<<endl;
llt ans = 0,tmp,flag;
for (int i = 1;i < (1<<fi);++i){

tmp = 1, flag = 0;
for (int j = 0;j < fi;++j)
if ( i & (1<<j) ){
flag++;
tmp *= Factor[j];
}
if ( flag&1 )
ans += (b/tmp - (a-1)/tmp);
else
ans -= (b/tmp - (a-1)/tmp);
}
printf("Case #%d: %I64d\n",kase++,b-a+1-ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法