欧拉函数,打表求欧拉函数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 ...
随机推荐
- 【Maven】eclipse中使用Maven、生命周期
1.在eclipse中创建maven工程 >>在eclipse中配置maven: 配置maven版本:Eclips自带了一个maven,一般不用自带的这个,而选择我们安装的那个maven ...
- RocketMQ在windows环境下的安装
原博地址:https://www.jianshu.com/p/4a275e779afa 一.预备环境 1.系统 Windows 2. 环境 JDK1.8.Maven.Git 二. RocketMQ部署 ...
- vue确认密码
rules: { pwd:[{ required:true, message:'创建密码',trigger:'blur' }], cpwd:[{ required:true,message:'确认密码 ...
- SparkRDD简介/常用算子/依赖/缓存
SparkRDD简介/常用算子/依赖/缓存 RDD简介 RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区. ...
- .Net进阶系列(15)-异步多线程(线程的特殊处理和深究委托赋值)(被替换)
1. 线程的异常处理 我们经常会遇到一个场景,开启了多个线程,其中一个线程报错,导致整个程序崩溃.这并不是我们想要的,我需要的结果是,其中一个线程报错,默默的记录下,其它线程正常进行,保证程序整体可以 ...
- Java入门系列(十)Java IO
概述 总体而言,java的读写操作又分为两种:字符流和字节流. 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件. 什么是流? ...
- [C++]指针与多级指针(图解)
声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神.也欢迎大家一起探讨,交流,以共同进步- 0.0 演示: /* @author:John ...
- luogu P1600 天天爱跑步
传送门 1A此题暴祭 (下面记点\(x\)深度为\(de_x\),某个时间点记为\(w_x\)) 首先,每条路径是可以拆成往上和往下两条路径的 对于往上的路径,假设有个人往上跑,\(w_y\)在点\( ...
- ubuntu16.04+anaconda的安装+解决conda不可用(配置路径)+卸载
首先一点,之前我一直自己安装python,然后直接在python环境下再安装第三方库,但自从另一台电脑重装系统之后,我当时在没有python的情况下直接安装的anaconda,觉得她超级好用(所以如果 ...
- maven阿里云镜像
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorO ...