poj 2478 欧拉函数筛选
2016-08-13 10:06
211 查看
Language: Default Farey Sequence
The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rational numbers a/b with 0 < a < b <= n and gcd(a,b) = 1 arranged in increasing order. The first few are F2 = {1/2} F3 = {1/3, 1/2, 2/3} F4 = {1/4, 1/3, 1/2, 2/3, 3/4} F5 = {1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5} You task is to calculate the number of terms in the Farey sequence Fn. Input There are several test cases. Each test case has only one line, which contains a positive integer n (2 <= n <= 106). There are no blank lines between cases. A line with a single 0 terminates the input. Output For each test case, you should output one line, which contains N(n) ---- the number of terms in the Farey sequence Fn. Sample Input 2 3 4 5 0 Sample Output 1 3 5 9 |
然后今天上午就重启了好几次
在程序中利用欧拉函数如下性质,可以快速求出欧拉函数的值 ( P为N的质因子 )
若(N%P==0 && (N/P)%P==0) 则有:E(N)=E(N/P)*P;
若(N%P==0 && (N/P)%P!=0) 则有:E(N)=E(N/P)*(P-1);
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define maxn 1000010 long long eu[maxn]; void init() { memset(eu,0,sizeof(eu)); for(int i=2;i<=maxn;i++){ if(!eu[i]){ for(int j=i;j<=maxn;j+=i){ if(!eu[j]) eu[j]=j; eu[j]=eu[j]/i*(i-1); } } } } int main() { int n; init(); //freopen("in.txt","r",stdin); while(scanf("%d",&n),n) { long long ans=0; for(int i=1;i<=n;i++) ans+=eu[i]; printf("%lld\n",ans); } return 0; }
相关文章推荐
- POJ 2478 Farey Sequence 筛选法求欧拉函数
- POJ 2478-Farey Sequence(筛选法求欧拉函数)
- POJ-2478(欧拉函数)
- poj2478 Farey Sequence (欧拉函数)
- POJ 2478 Farey Sequence & POJ 3090 Visible Lattice Points (欧拉函数)
- POJ 2478 Farey Sequence 欧拉函数运用
- poj 2478(快速求解欧拉函数优化版。。。)
- poj 2478 Farey Sequence 欧拉函数
- POJ 2478 Farey Sequence(欧拉函数前n项和)
- POJ 2478 Farey Sequence 解题报告(欧拉函数 筛求法)
- POJ 2478 Farey Sequence(欧拉函数)
- POJ 2478 欧拉函数打表的运用
- poj 2478 Farey Sequence 线性筛法优化的欧拉函数
- poj 2478(很明显的欧拉函数)
- poj_2478_欧拉函数
- POJ 2478 Farey Sequence(法雷级数+欧拉函数递推)
- poj 2478 Farey Sequence 欧拉函数前缀和
- POJ - 2478 欧拉函数..
- poj 2478 Farey Sequence(基于素数筛法欧拉函数)
- POJ2478 Farey Sequence【快速求欧拉函数】