欧拉函数,打表求欧拉函数poj3090
欧拉函数 φ(n) 定义:[1,N]中与N互质的数的个数
//互质与欧拉函数 /*
求欧拉函数
按欧拉函数计算公式,只要分解质因数即可
*/
int phi(int n){
int ans=n;
for(int i=;i<=sqrt(n);i++){
if(n%i==){
ans=ans/i*(i-);
while(n%i==) n/=i;
}
}
if(n>) ans=ans/n*(n-);
return ans;
}
性质:1.[1,n]中与n互质的数的和为 n*φ(n)/2;
2.欧拉函数是积性函数
3.p|n && p*p|n =>φ(n)=φ(n/p)*p;
4.p|n && p*p不能整除n,则φ(n)=φ(n/p)*(p-1);
5.sum{φ(d)}=n,d是n的约数
打表求欧拉函数
第一种是era筛的思路,O(nlogn)的复杂度,即每个质数p的倍数都乘以(1-1/p)即可
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int phi[];
void euler(int n){//用era筛的思路O(nlogn)复杂度
for(int i=;i<=n;i++)phi[i]=i;
for(int i=;i<=n;i++)
if(phi[i]==i)//i是质数
for(int j=;i*j<=n;j++)
phi[i*j]=phi[i*j]/i*(i-);
}
int main(){
int t,n;
euler();
scanf("%d",&t);
for(int tt=;tt<=t;tt++){
scanf("%d",&n);
int ans=;
for(int i=;i<=n;i++)
ans+=*phi[i];
printf("%d %d %d\n",tt,n,ans+);
}
}
第二种是线性筛的思路:复杂度O(n)
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int phi[];
int m,v[],prime[];
void euler(int n){//用era筛的思路O(nlogn)复杂度
memset(v,,sizeof v);
m=;
for(int i=;i<=n;i++){
if(v[i]==){//i是质数
v[i]=i,prime[++m]=i;
phi[i]=i-;
}
for(int j=;j<=m;j++){
if(prime[j]>v[i] || prime[j]*i>n) break;
v[i*prime[j]]=prime[j];
phi[i*prime[j]]=phi[i]*(i%prime[j]?prime[j]-://φ(n)=φ(n/p)*(p-1) 性质4
prime[j]);//φ(n)=φ(n/p)*p 性质3
}
}
}
int main(){
int t,n;
euler();
scanf("%d",&t);
for(int tt=;tt<=t;tt++){
scanf("%d",&n);
int ans=;
for(int i=;i<=n;i++)
ans+=*phi[i];
printf("%d %d %d\n",tt,n,ans+);
}
}
欧拉函数,打表求欧拉函数poj3090的更多相关文章
- UVA 11426 GCD - Extreme (II)(欧拉函数打表 + 规律)
Given the value of N, you will have to find the value of G. The definition of G is given below:Here ...
- LightOJ - 1370 Bi-shoe and Phi-shoe (欧拉函数打表)
题意:给N个数,求对每个数ai都满足最小的phi[x]>=ai的x之和. 分析:先预处理出每个数的欧拉函数值phi[x].对于每个数ai对应的最小x值,既可以二分逼近求出,也可以预处理打表求. ...
- POJ 2478 欧拉函数打表的运用
http://poj.org/problem?id=2478 此题只是用简单的欧拉函数求每一个数的互质数的值会超时,因为要求很多数据的欧拉函数值,所以选用欧拉函数打表法. PS:因为最后得到的结果会很 ...
- 【poj2478-Farey Sequence】递推求欧拉函数-欧拉函数的几个性质和推论
http://poj.org/problem?id=2478 题意:给定一个数x,求<=x的数的欧拉函数值的和.(x<=10^6) 题解:数据范围比较大,像poj1248一样的做法是不可行 ...
- hdu 2814 快速求欧拉函数
/** 大意: 求[a,b] 之间 phi(a) + phi(a+1)...+ phi(b): 思路: 快速求欧拉函数 **/ #include <iostream> #include & ...
- A - Bi-shoe and Phi-shoe (欧拉函数打表)
Description Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a ver ...
- hdu 2824 The Euler function 欧拉函数打表
The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 1286 找新朋友 (欧拉phi函数打表)
题意:你懂得. 析:一看这个题应该是欧拉phi函数,也就说欧拉phi函数是指求从 1 到 n 中与 n 互素的数的个数,这个题很明显是这个意思嘛,不多说了. 代码如下: #include <io ...
- 杭电多校第十场 hdu6434 Count 欧拉函数打表 快速打表模板
Problem I. Count Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
随机推荐
- python---生成验证码图片
工具插件verifycode.py中,记得使用时需要在路由根目录中引入文字资源文件 # coding:utf8 # __author: Administrator # date: // # /usr/ ...
- CM记录-Hbase启用安全认证控制
1.cm-cluster2-HBase-2-HBase 安全授权(hbase.security.authorization)-simple改为true 2.添加配置 1)超级用户-加入root.hba ...
- CM记录-Hadoop 分布式文件系统HDFS(登录、配置、监控)
1.登录(浏览器输入ip地址:7180,登录用户名和登录密码即可) 2.CM主界面(各个组件,监控图表,绿色代表运行正常.黄色代表运行不良,需要关注根据实际情况调整,红色代表故障,需要排查问题) 3. ...
- Hbase记录-HBase基本操作(一)
HBase创建表 可以使用命令创建一个表,在这里必须指定表名和列族名.在HBase shell中创建表的语法如下所示. create ‘<table name>’,’<column ...
- Hibernate_day02
一.今天内容 1 实体类编写规则 2 hibernate主键生成策略 (1)native (2)uuid 3 实体类操作 (1)crud操作 (2)实体类对象状态 4 hibernate的一级缓存 5 ...
- VS设置以管理员方式运行
一直以为VS不能直接以管理员方式运行,原来它是在高级里的.
- 5. SprigBoot自动配置原理
配置文件到底能写什么?怎么写? 都可以在SpringBoot的官方文档中找到: 配置文件能配置的属性参照 1.自动配置原理: 1).SpringBoot启动的时候加载主配置类,开启了自动配置功 ...
- C# cmd调用外部命令
void test2() { Process process = new Process(); //C:\\Users\\Administrator\\Desktop\\ffmpeg\\bin\\ff ...
- 单行纯文本框QLineEdit
继承 QWidget 天子骄龙
- mysql 案例~select引起的性能问题
案例1 背景:测试环境下发现大量select查询,而且负载飙升到90+ 排查思路: 1 老规则,按照排错脚本走一圈,规划出几个元素(1 针对库访问的统计 2针对具体语句类型的统计),发现有大量的sel ...