您的位置:首页 > 其它

HDU 1286 找新朋友

2016-07-11 17:10 274 查看
Problem Description

新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来。

【题目分析】

还是一道欧拉函数的裸题。预处理之后输出。1A

【代码】

#include <cstdio>
long long n=40000,phi[40001],p[40001],top=0;
bool ma[40001];
void init()
{
phi[1]=1;
for (int i=2;i<=n;++i)
{
if (!ma[i]) ma[i]=true,p[++top]=i,phi[i]=i-1;
for (int j=1;j<=top&&i*p[j]<=n;++j)
{
ma[i*p[j]]=true;
if (i%p[j]==0){phi[i*p[j]]=phi[i]*p[j];break;}
else phi[i*p[j]]=(p[j]-1)*phi[i];
}
}
}
int main()
{
int l,r; init();
int T,k;
scanf("%d",&T);
while (T--)
{
scanf("%d",&k);
printf("%d\n",phi[k]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu