poj 2478 Farey Sequence(数论:欧拉函数+打表)

来源:互联网 发布:致富360是什么软件 编辑:程序博客网 时间:2024/06/05 12:08

注意括号内分数分母相同时的区别

f(5)中以5为分母的数其分子均与5互质

进而推得:f(n)中以i为分母的数其各个分子均与i互质

因此:

用筛选法打表phi,再预处理下即可

看到别人说也可以用欧拉函数的积性性质来做,有兴趣的可以看一下

我的代码如下:

#include <stdio.h>#define MAXN 1001000#define LL long longLL phi[MAXN];void phi_table(int n) {    int i, j;    for(i=2; i<=n; ++i) {        phi[i] = 0;    }    phi[1] = 1;    for(i=2; i<=n; ++i) {        if(!phi[i]) {            for(j=i; j<=n; j+=i) {                if(!phi[j])                    phi[j] = j;                phi[j] = phi[j]/i*(i-1);            }        }    }    for(i=3; i<=n; ++i)        phi[i] += phi[i-1];}int main(void) {    int n;    phi_table(MAXN);    while(scanf("%d", &n), n) {        printf("%lld\n", phi[n]);    }    return 0;}


0 0
原创粉丝点击