hdu 2841

来源:互联网 发布:netsh绑定mac 编辑:程序博客网 时间:2024/06/12 23:19

思路: 求出 x与 (1,y) 之间所有互质的数  x 范围  1 到 100000;

数论+容斥

先用欧拉函数求出  x   的素因子   

考虑每一个x的因子的影响 


#include<bits/stdc++.h>using namespace std;typedef  __int64 LL;LL cot ;LL a[1005];void oula(LL n){     memset(a,0,sizeof(a));       cot = 0;    for(LL i = 2 ; i<=sqrt(n); i++)    {        if(!(n%i))        {            a[cot++] = i;            while(!(n%i))            {                n /= i;            }        }    }    if(n>1)    {        a[cot++]=n;    }}LL rongchi(LL n){    LL temp = 0;    for(LL  i =1 ; i<(1<<cot); i++)    {        LL  ans = 1;        LL  ct =0 ;        for(LL  j = 0 ; j<cot; j++)        {            if( i&(1<<j))            {                ct++;                ans = ans*a[j];            }        }        if(ct&1)        {            temp+= n/ans;        }        else        {            temp -= n/ans;        }      //  printf("temp  = %I64d\n",temp);    }    return n - temp ;}int main(){    int T;    scanf("%d",&T);    while(T--)    {        LL  n,m;        scanf("%I64d%I64d",&m,&n);        if(m>n)            swap(m,n);        LL ans = 0;          if(m==1)          {              printf("%I64d\n",n);              continue;          }        for( LL i = 2; i<=m; i++)        {            oula(i);           LL k = rongchi(n);        //    printf("K=%I64d\n",k);            ans+=k;        }        printf("%I64d\n",ans+n);    }    return 0 ;}


0 0
原创粉丝点击