hdu1695 GCD 欧拉函数+容斥原理

来源:互联网 发布:淘宝客招募贴怎么写 编辑:程序博客网 时间:2024/05/18 05:02

一个主要问题,就是a和c都等于1。。。


#include <iostream>#include <algorithm>#include <cstdio>#define LL long longusing namespace std;#define N 100010LL el[N];struct NUM{    LL allp;    LL prime[20];    NUM(){allp=0;}}num[N];void get_el(){    LL i,j,k;    for(i=0;i<N;i++) el[i]=i;    for(i=2;i<N;i++)    {        if(el[i]==i) for(j=i;j<N;j+=i)        {            el[j]=el[j]/i*(i-1);            num[j].prime[num[j].allp++]=i;        }        el[i]+=el[i-1];    }}LL rc(LL x,LL a,LL n){    LL t,r=0;    for(LL i=x;i<num[n].allp;i++)    {        t=a/num[n].prime[i];        r+=t-rc(i+1,t,n);    }    return r;}LL solve(LL a,LL b){    if(a>b) swap(a,b);    LL x,k,ans=0,prime[30];    for(x=a+1;x<=b;x++)    {        ans+=a-rc(0,a,x);    }    return ans+el[a];}int main(){    LL a,b,c,d,k;    int T,cas=1;    cin>>T;    get_el();    while(T--)    {        cin>>a>>b>>c>>d>>k;        cout<<"Case "<<cas++<<": "<<(k==0 ? 0 : solve(b/k,d/k))<<endl;    }    return 0;}



现在发现   其实ab不等于1也可以的

0 0