您的位置:首页 > 产品设计 > UI/UE

POJ 2478 Farey Sequence

2016-05-25 20:13 453 查看

题目分析

这道题最初我本来想找规律,分析了一下发现确实是这样的,就是F(n) = F(n-1) + 小于n且与n互素的数的个数。那么怎样求与n互素的数的个数呢》》很明显,欧拉公式处理一下进行打表,随后再对F数组进行打表,这样就可以得到本次的解了。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long LL;
const int maxn = 1000005;
LL phi[maxn],f[maxn];

void phi_table(LL *phi)
{
phi[1] = 1;
for(int i = 2; i <= maxn; i++) if(!phi[i])
for(int j = i; j <= maxn; j += i){
if(!phi[j]) phi[j] = j;
phi[j] = phi[j]/i*(i-1);
}
}

int main()
{
int n;
phi_table(phi);
f[2] = 1LL;
for(int i = 3; i < maxn; i++)
f[i] = f[i-1]+phi[i];
while(scanf("%d", &n) != EOF && n)
printf("%I64d\n", f
);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: