2021.08.10 Euler函数总结
2021.08.10 Euler函数总结
知识:
记 φ(n) 表示在 [1,n] 中与 n互质的数的个数。
1.p为质数,则
\]
注:每p个数中就有一个数整除p^l
延伸1:若
\]
则
\]
延伸2:(m,n)=1,则
\]
延伸3:若m|n,则
\]
延伸4:令
\]
则f(n)=n
注:f(n)为积性函数。令
\]
且
f(p_i^{a_i})
& =φ(1)+φ(p_i)+φ(p_i^2)+\cdots +φ(p_i^{a_i})\\
& =1+(p_i-1)+p_i(p_i-1)+p_i^2(p_i-1)+\cdots +p_i^{a_i-1}(p_i-1)\\
& =p_i^{a_i}
\end{aligned}
\]
2.若p为质数,则
\]
延伸1:若p为质数,且p是n的最小质因子,p|n,即n=pt,则
\begin{array}{lr}
φ(p)*φ(t)=(p-1)*φ(t) & (p,t)=1\\
p*φ(t) & (p,t)>1
\end{array}
\right.
\]
3.2|φ(n)(n>2)
注:若(x,n)=1,则(n-x,n)=1,所以当除了n=2*x时,所有x可以两两凑对。
练习题:
UVA11327 Enumerating Rational Numbers - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
重点:
1.线性筛欧拉函数
//euler函数+前缀和+暴力二分~
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+10;
typedef long long ll;
ll top,k,vis[N],prime[N],oula[N],sum[N];
inline ll read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int gcd(int x,int y){
return y==0?x:gcd(y,x%y);
}
int main(){
//线性筛欧拉函数
memset(vis,1,sizeof(vis));
oula[1]=1;vis[1]=0;
for(int i=2;i<=2e5;i++){
if(vis[i])oula[i]=i-1,prime[++top]=i;
for(int j=1;j<=top;j++){
if(i*prime[j]>2e5)break;
vis[i*prime[j]]=0;
if(i%prime[j])oula[i*prime[j]]=(prime[j]-1)*oula[i];
else{
oula[i*prime[j]]=prime[j]*oula[i];
break;
}
}
}
for(int i=1;i<=2e5;i++)sum[i]=sum[i-1]+oula[i];
while(~scanf("%lld",&k)){
if(!k)return 0;
else if(k==1)cout<<"0/1"<<endl;
else if(k==2)cout<<"1/1"<<endl;
else{
--k;
int x=lower_bound(sum+1,sum+200000+1,k)-sum;
if(sum[x]==k){
cout<<x-1<<"/"<<x<<endl;
continue;
}
--x;
k-=sum[x];
++x;
if(k==1){
cout<<"1/"<<x<<endl;
continue;
}else{
--k;
for(int j=2;j<x;j++){
if(gcd(j,x)==1)--k;
if(!k){
cout<<j<<"/"<<x<<endl;
break;
}
}
}
}
}
return 0;
}
UVA10299 Relatives - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
重点:
1.性质1延伸1
//euler函数模板!!!刚打过UVA11327,本座记得很清楚~
//1e9的数据有点大,需要单点求euler函数——分解质因数
//详情请查看《初等数论2》第一章欧拉函数部分
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e9+10;
int k;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void euler(int x){
int ans=x,n=x;
for(int i=2;i*i<=n;i++){
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0)n/=i;
}
}
if(n>1)ans=ans/n*(n-1);
cout<<ans<<endl;
}
int main(){
while(~scanf("%d",&k)){
if(!k)return 0;
if(k==1)cout<<"0"<<endl;
else euler(k);
}
return 0;
}
UVA10179 Irreducable Basic Fractions - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
//euler函数模板!!!刚打过UVA11327,本座记得很清楚~
//1e9的数据有点大,需要单点求euler函数——分解质因数
//详情请查看《初等数论2》第一章欧拉函数部分
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1e9+10;
int k;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void euler(int x){
int ans=x,n=x;
for(int i=2;i*i<=n;i++){
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0)n/=i;
}
}
if(n>1)ans=ans/n*(n-1);
cout<<ans<<endl;
}
int main(){
while(~scanf("%d",&k)){
if(!k)return 0;
euler(k);
}
return 0;
}
2021.08.10 Euler函数总结的更多相关文章
- 2021.08.30 前缀函数和KMP
2021.08.30 前缀函数和KMP KMP算法详解-彻底清楚了(转载+部分原创) - sofu6 - 博客园 (cnblogs.com) KMP算法next数组的一种理解思路 - 挠到头秃 - 博 ...
- 新手C#SQL Server使用记录2018.08.10
主键(PrimaryKey):主键就是每个数据行(记录)的唯一标识,不会有重复值的列(字段)才能当做主键.一个表可以没有主键,但是这样会很难处理表,因此一般情况表都要设置主键. 主键有两张选用策略,分 ...
- 2021.08.16 P1260 工程规划(差分约束)
2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...
- 2021.08.16 P1078 文化之旅(最短路)
2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...
- 2021.08.16 P1300 城市街道交通费系统(dfs)
2021.08.16 P1300 城市街道交通费系统(dfs) P1300 城市街道交通费系统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 城市街道交费系统最近创立了.一 ...
- 2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意)
2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意) P1363 幻象迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 幻象迷宫可以认为是无限 ...
- 2021.08.09 P5658 括号树(树形结构)
2021.08.09 P5658 括号树(树形结构) [P5658 CSP-S2019] 括号树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 太长,在链接中. 分析及代码 ...
- 2021.08.09 P4868 Preprefix sum(树状数组)
2021.08.09 P4868 Preprefix sum(树状数组) P4868 Preprefix sum - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 前缀和(pr ...
- 2021.08.09 P6037 Ryoku的探索(基环树)
2021.08.09 P6037 Ryoku的探索(基环树) P6037 Ryoku 的探索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的性质 2.基环树的性质 ...
随机推荐
- Linux系统常用指令
建立一个文件或文件夹的软链接: ln -s 原名 软链接名 软链接就类似Windows下的"快捷方式",访问它其实访问的是它指向的内容. git仓库操作 1.通常远程操作的第一步, ...
- 网络监听HTTP协议信息实验
一.开启环境 登录web服务器,在服务器中开启phpstudy服务器环境. 在操作机中打开目标站[Web服务器IP地址]地址.安装wordpress,数据库名:wordpress,用户名root 密码 ...
- bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)
bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...
- 面试问题之C++语言:C++中指针和引用的区别
转载于:https://blog.csdn.net/gcc2018/article/details/82285940 1.指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用 ...
- MyISAM Static 和 MyISAM Dynamic 有什么区别?
在 MyISAM Static 上的所有字段有固定宽度.动态 MyISAM 表将具有像 TEXT, BLOB 等字段,以适应不同长度的数据类型. MyISAM Static 在受损情况下更容易恢复.
- innodb和myisam
在Mysql数据库中,常用的引擎主要就是2个:Innodb和MyIASM.这篇文章将主要介绍这两个引擎,以及该如何去选择引擎,最后在提一下这2种引擎所使用的数据结构是什么. 首先介绍一下Innodb引 ...
- idea使用maven工程创建web项目并支持jsp
主要要再pom文件里面添加依赖: <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> & ...
- @Required 注解 ?
这个注解表明 bean 的属性必须在配置的时候设置,通过一个 bean 定义的显式的 属性值或通过自动装配,若@Required 注解的 bean 属性未被设置,容器将抛出 BeanInitializ ...
- 《自动控制原理》个人笔记(来自ppt课件)
控制的含义 控制(CONTROL)----某个主体使某个客体按照一定的目的动作.主体–人:人工控制: 机器:自动控制客体–指一件物体,一套装置,一个物化过程,一个特定系统. 人工控制与自动控制 人在控 ...
- 汽车最强大脑ECU和单片机是什么关系
先上图一张,据说这是某个F1赛车的动力总成ECU. 定睛一看,这不就是两个英飞凌的单片机的合体嘛. ECU的定义 ECU原来指的是engine control unit,即发动机控制单元,特指电喷发动 ...