欧拉函数,打表求欧拉函数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---一个简单的socket
server端: 1 创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) #family参数代表地址家族,可为 ...
- Linux上安装Perl模块的两种方法
Linux/Unix下安装Perl模块有两种方法:手工安装和自动安装.第一种方法是从CPAN上下载 您需要的模块,手工编译.安装.第二种方法是联上internet,使用一个叫做CPAN的模块自动完 ...
- Kruskal算法:最小生成树
//Kruskal算法按照边的权值从小到大查看一遍,如果不产生圈(重边等也算在内),就把当前这条表加入到生成树中. //如果判断是否产生圈.假设现在要把连接顶点u和顶点v的边e加入生成树中.如果加入之 ...
- jmeter使用正则表达式匹配多个中的响应结果
一.背景: 同一个正则表达式匹配多个响应结果值,之前都是添加多个正则表达式,一个一个去获取需要的值,比较麻烦:今天尝试了一下用一个正则表达式获取响应中所有需要的值,使用这种方式也能够获取多个结果中指定 ...
- 从零开始搭建Salt Web之初探salt-api
Salt-API入门 在Google搜索栏输入salt-api,会有一些讲述如何使用Salt-API的文章,确实有效,不过都是建立 在将Salt安装在默认目录下的情况下,即通过apt-get inst ...
- C# CEF 封装UserControl
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...
- 调用write()写
一.在POSIX中的定义 #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); 二.返回值 ( ...
- nginx 全局配置
nginx 全局配置 #user nobody; # user 主模块 ,指定nginx worker 进程的运行用户组 worker_processes ; # worker_processes 开 ...
- NOI2018场外游记
鬼晓得APIO以后我经历了些什么 Day 0 好像没什么要记的 Day 1 下午去参加开幕式 神tm大型落地柜装风扇空调下放冰块 开幕式,,,hot chocolate是真的hot(强制在线?卡常?) ...
- rem,em
任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的body选择 ...