#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 1000000007
ll 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;
}
UESTC1720(容斥原理)
最新推荐文章于 2021-08-18 17:21:31 发布