題目大意
給出一個n,求phi(n)及2~n-1中與n互質的數的個數。
多組數據,T<=100000,n<=10000000
時間限制 1s
空間限制 256M
解題思路
互質的數個數爲phi(n)*n/2
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define maxn 10000000+6
#define fr(i,a,b) for(i=a;i<=b;i++)
using namespace std;
typedef long long ll;
int i,j,k,n,T;
ll pri[maxn],phi[maxn];
bool kan[maxn];
void pre(ll n)
{
int tot=0;
fr(i,2,n-1)
{
if (!kan[i])
{
pri[++tot]=i;
phi[i]=i-1;
}
fr(j,1,tot)
{
ll k=i*pri[j];
if (k>n) break;
kan[k]=1;
if (i%pri[j]==0)
{
phi[k]=phi[i]*pri[j];
break;
}
else phi[k]=phi[i]*(pri[j]-1);
}
}
return;
}
int main()
{
scanf("%d",&T);
pre(10000000);
while (T--)
{
scanf("%d",&n);
printf("%lld %lld\n",phi[n],phi[n]*n/2);
}
return 0;
}