poj2478【欧拉函数】
2016-06-23 18:38
288 查看
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 Source POJ Contest,Author:Mathematica@ZSU |
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<list>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=1000010;
long long num[maxn],eular[maxn];
void dabiao(){
for(int i=2;i<=1000000;++i){
if(eular[i]==0){
for(int j=i;j<=1000000;j+=i){
if(eular[j]==0){
eular[j]=j;
}
eular[j]=eular[j]/i*(i-1);
}
}
}
for(int i=2;i<=1000000;++i){
num[i]=num[i-1]+eular[i];
}
}
int main()
{
dabiao();
long long n;
while(scanf("%lld",&n),n){
printf("%lld\n",num
);
}
return 0;
}
相关文章推荐
- 关键词权重计算算法 - TF-IDF
- Nginx 安装配置
- Linux系统备份与还原
- git-quick-start 动画讲解Git命令行
- 字符串转成16进制数值
- Android 的MVC
- swiper的基础使用(十二)
- 为什么不能直接通过IP访问网站
- 【JZOJ3430】DY引擎
- angular.js通过URL获取json并显示代码
- GeoServer配置图层按比例尺显示和隐藏
- 101. NSSortDescriptor排序
- 抓包及WireShark工具介绍
- linux修改root用户的密码
- 自定义圆形统计图(静态)
- ubuntu14.10下解决MYSQL安装错误:"ERROR 1045 (28000)
- 如何使用MarkDown 使 代码块高亮
- 数据库
- Intro to PyShark for Programmatic Packet Analysis
- 【干货】微信排版实用经验,看后操作立马上手