hdu1695 GCD (容斥原理+欧拉函数)

/*

第一个区间:[1,2,...,b/k]  第二个区间:[b/k+1,b/k+2,...,d/k]
读第一个区间我们只要利用欧拉函数雷家没个数的质因数的个数即可,第二个区间我们任取x,
要求[1,2,...,b/k]中所有与x互质的数的个数,这里我们用到容斥原理:先将x质因数分解,
求得[1,2,...,b/k] 里所有能被x的质因数整除的数的个数,然后用b/k减去即可。 
*/ 
#include
#include
#define size 100010
using namespace std;
struct Num
{
   int count;
   int prime[20];
}N[size];
__int64 elur[size];

void Elur()
{
    elur[1]=1;
    for(int i=0;id)
        {
           b^=d;
           d^=b;
           b^=d;
        }
        b=b/k;
        d=d/k;
        ans=elur[b];
        for(int i=b+1;i<=d;i++)
        {
            ans+=b-Inclusion_exclusion(0,b,i);
        } 
        printf("Case %d: %I64d\n",++tt,ans);
    } 
    return 0;
}

你可能感兴趣的:(组合数学,关于程序)