UESTC1720(容斥原理)

来源:互联网 发布:淘宝买iphonese 编辑:程序博客网 时间:2024/04/30 08:31
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<vector>using namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define ll long long#define inf 0x3f3f3f3f#define N 1000005#define MOD 1000000007ll n,ans;ll prime[N],sum;void init()//筛选素数  {      ll i,j,flag;      prime[0]=2;      sum=1;      for(i=3;i<=1000000;i++)      {          flag=1;          for(j=0;j<sum&&prime[j]*prime[j]<=i;j++)          {              if(i%prime[j]==0)              {                  flag=0;break;              }          }          if(flag)prime[sum++]=i;      }  }  ll dfs(ll num,ll id){ll ret=0,i;for(i=id;prime[i]*prime[i]<=num&&i<sum;i++){ret+=num/(prime[i]*prime[i])-dfs(num/(prime[i]*prime[i]),i+1);}return ret;}int main(){init();ll t,i,j;scanf("%lld",&t);while(t--){scanf("%lld",&n);printf("%lld\n",n-dfs(n,0));}return 0;}