欧拉函数,打表求欧拉函数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 ...
随机推荐
- 【CSS】元素样式
1.使用CSS的三种方式: 方式一.通过元素的style属性来设置元素的样式 方式二.在HTML头部标签<head>中通过<link>标签引入一个外部的CSS资源,通常是一个C ...
- python influxdb
Git:https://github.com/influxdata/influxdb-python 帮助文档:http://influxdb-python.readthedocs.io/en/late ...
- Scala进阶之路-Spark独立模式(Standalone)集群部署
Scala进阶之路-Spark独立模式(Standalone)集群部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道Hadoop解决了大数据的存储和计算,存储使用HDFS ...
- ACPI:Memory错误解决办法
Linux系统装在vmware12中,打开虚拟机时报错,报错内容大概如下: ACPI:memory_hp:Memory online failed for 0x100000000 - 0x400000 ...
- 学习windows编程 day4 之 盯裆猫
写着写着就困了.... 看这些测量数据就算了,是对各种函数的练习 #include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT ...
- springboot环境下配置过滤器和拦截器
以前我们在配置过滤器和拦截器的时候,都是一个类继承一个接口,然后在xml中配置一下就ok 但是,但是,这是springboot的环境,没有xml的配置.所以我们还要继续学习啊啊啊啊啊~~~~~ 先简单 ...
- layui(一)——layDate组件常见用法
和 layer 一样,我们可以在 layui 中使用 layDate,也可直接使用 layDate 独立版,可按照实际需求来选择.options整理如下: layui.use('laydate', f ...
- np.array和np.asarray区别
- python 代码模板
命令[python3 -m pydoc -p 1234] 通过http://localhost:1234来访问查看文档 # -*- coding: utf-8 -*-""&qu ...
- nginx配置url中带问号的rewrite跳转
今天收到一个需求,要将一个带查询参数的url跳转到另外一个静态url,安装常规的rewrite规则,如: rewrite ^/a.html?id=67$ http://zt.epython.cn/20 ...