Farey Sequence(欧拉函数板子题)
题目链接:http://poj.org/problem?id=2478
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 19736 | Accepted: 7962 |
Description
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
Output
Sample Input
2
3
4
5
0
Sample Output
1
3
5
9
Source
/**
有三条特性
若a为质数 phi[a]=a-1
若a为质数,b%a==0 phi[a*b]=phi[b]*a;
若a b 互质 phi[a*b]=phi[a]*phi[b](当a为质数 如果b%a!=0) */
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
const int maxn=1e6+;
int phi[maxn],prime[maxn],p[maxn];//phi[i]代表i的欧拉函数值 prime[i]=0代表是素数 1代表不是素数 p存储素数
void make()
{
phi[]=;//特例
int num=;
for(int i=;i<=maxn;i++)
{
if(!prime[i])//是素数
{
p[num++]=i;//
phi[i]=i-;//素数的欧拉函数值就是它的值减1
}
for(int j=;j<num&&p[j]*i<maxn;j++)//用当前已经得到的素数筛去p[j]*i
{
prime[p[j]*i]=;//可以确定p[j]*i不是质数
if(i%p[j]==)//第二条特性
{
phi[p[j]*i]=phi[i]*p[j];
break;//欧拉筛的核心语句 保证每个数只会被自己最小的质因子筛掉一次
}
else phi[p[j]*i]=phi[i]*phi[p[j]];
}
}
return ;
} int main()
{
make();
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==) break;
LL sum=;
for(int i=;i<=n;i++) sum+=phi[i];
printf("%lld\n",sum);
}
// for(int i=1;i<=100;i++) cout<<phi[i]<<" "; return ;
}
Farey Sequence(欧拉函数板子题)的更多相关文章
- poj2478 Farey Sequence (欧拉函数)
Farey Sequence 题意:给定一个数n,求在[1,n]这个范围内两两互质的数的个数.(转化为给定一个数n,比n小且与n互质的数的个数) 知识点: 欧拉函数: 普通求法: int Euler( ...
- POJ2478 Farey Sequence —— 欧拉函数
题目链接:https://vjudge.net/problem/POJ-2478 Farey Sequence Time Limit: 1000MS Memory Limit: 65536K To ...
- poj 2478 Farey Sequence(欧拉函数是基于寻求筛法素数)
http://poj.org/problem?id=2478 求欧拉函数的模板. 初涉欧拉函数,先学一学它主要的性质. 1.欧拉函数是求小于n且和n互质(包含1)的正整数的个数. 记为φ(n). 2. ...
- poj2478 Farey Sequence 欧拉函数的应用
仔细看看题目,按照题目要求 其实就是 求 小于等于n的 每一个数的 欧拉函数值 的总和,为什么呢,因为要构成 a/b 然后不能约分 所以 gcd(a,b)==1,所以 分母 b的 欧拉函数值 ...
- hdu1787 GCD Again poj 2478 Farey Sequence 欧拉函数
hdu1787,直接求欧拉函数 #include <iostream> #include <cstdio> using namespace std; int n; int ph ...
- UVA12995 Farey Sequence [欧拉函数,欧拉筛]
洛谷传送门 Farey Sequence (格式太难调,题面就不放了) 分析: 实际上求分数个数就是个幌子,观察可以得到,所求的就是$\sum^n_{i=2}\phi (i)$,所以直接欧拉筛+前缀和 ...
- poj 2478 Farey Sequence 欧拉函数前缀和
Farey Sequence Time Limit: 1000MS Memory Limit: 65536K Description The Farey Sequence Fn for ...
- poj2407(欧拉函数模板题)
题目链接:https://vjudge.net/problem/POJ-2407 题意:给出n,求0..n-1中与n互质的数的个数. 思路:欧拉函数板子题,先根据唯一分解定理求出n的所有质因数p1,p ...
- UVA 10820 欧拉函数模板题
这道题就是一道简单的欧拉函数模板题,需要注意的是,当(1,1)时只有一个,其他的都有一对.应该对欧拉函数做预处理,显然不会超时. #include<iostream> #include&l ...
随机推荐
- jqGrid查询案例(实用)
var ThisTime = getNowFormatDate(); //加载表格 function GetGrid() { var selectedRowIndex = 0; var $gridTa ...
- QGIS编译教程
注意更新时间:Thursday November 02, 2017 1. Introduction 简介 This document is the original installation guid ...
- 编写高质量代码改善C#程序的157个建议——建议32:总是优先考虑泛型
建议32:总是优先考虑泛型 泛型的优点是多方面的,无论泛型类还是泛型方法都同时具备可重用性.类型安全性和高效率等特性,这是非泛型和非泛型方法无法具备的. 以可重用性为例: class MyList { ...
- 20169219 实验四Android程序设计
一.实现Linux下dc的功能,计算后缀表达式的值 public int evaluate(String expr) { int op1, op2, result = 0; String token; ...
- lda:变分的推导
lda,latent diriclet allocation,是一个最基本的bayesian模型.本文要研究lda基于变分的推导方法.意义是重大的. 一.符号的定义 : the number of t ...
- Ubuntu配置ip和dns后还是不能访问外网
https://blog.csdn.net/WFping518/article/details/81011722
- ftp操作方法整理
1.整理简化了下C#的ftp操作,方便使用 1.支持创建多级目录 2.批量删除 3.整个目录上传 4.整个目录删除 5.整个目录下载 2.调用方法展示, var ftp ...
- 【连载】redis库存操作,分布式锁的四种实现方式[四]--基于Redis lua脚本机制实现分布式锁
一.redis lua介绍 Redis 提供了非常丰富的指令集,但是用户依然不满足,希望可以自定义扩充若干指令来完成一些特定领域的问题.Redis 为这样的用户场景提供了 lua 脚本支持,用户可以向 ...
- ecliplse的下载安装
ecliplse的官方下载地址是: https://www.eclipse.org/downloads/packages/ 进去的速度可能比较慢,请耐心等待,进去之后的页面如下,为了便于理解下面的是我 ...
- 汇编工具安装二:RadASM的安装!
已经配置好的汇编工具下载地址:http://download.csdn.net/detail/sunylat/9189543 RadASM也是一款汇编开发工具,网址:http://www.oby.ro ...