首页 > 其他分享 >欧拉函数

欧拉函数

时间:2023-07-07 21:13:22浏览次数:42  
标签:prime 函数 int long 欧拉 euler

 欧拉函数的原式是φ(n)=Σ[gcd(i,n)=1],它是一种积性函数,他符合:设p,q是互素的正整数,φ(pq)=φ(p)φ(q)

欧拉函数定理1:设p,q是互素的正整数,φ(pq)=φ(p)φ(q)

欧拉函数定理2:n=Σφ(d)

欧拉函数定理3:φ(n)=nΠ(1-1/pi)

他最早应用在密码学中

下面给出求法之一试除法的代码,时间复杂度是O(n*sqrt(n))

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int euler(int n){
	int ans=n;
	for(int i=2;i*i<=n;i++){
		if(n%i)continue;
		ans=ans/i*(i-1);
		while(n%i==0)n/=i;
	}
	if(n!=1)ans=ans/n*(n-1);
	return ans;
}
int main(){
	int n;
	cin>>n;
	cout<<euler(n);
	return 0;
}

  

例题:P2158 [SDOI2008]仪仗队

不妨通过找规律来解题,设C君在坐标(0,0),通过观察,就可以发现当正方形边长为n是,可以看见的人的数量就等于  2*Σφ(i)(2<=i<n)+1 当n=1时,答案为0

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5+39+7;
int vis[N],prime[N],euler[N],sum[N];
void get_euler(){
	euler[1]=1;
	int cnt=0;
	for(int i=2;i<N;i++){
		if(!vis[i]){
			vis[i]=i;
			prime[++cnt]=i;
			euler[i]=i-1;
		}
		for(int j=1;j<=cnt;j++){
			if(i*prime[j]>N)break;
			vis[i*prime[j]]=prime[j];
			if(i%prime[j]==0){
				euler[i*prime[j]]=euler[i]*prime[j];
				break;
			}
			euler[i*prime[j]]=euler[i]*euler[prime[j]];
		}
	}
}
int main(){
	get_euler();
	sum[1]=1;
	for(int i=2;i<=N;i++)sum[i]=sum[i-1]+euler[i];
	int n;
	cin>>n;
	if(n==1)cout<<0;
	else cout<<2*sum[n-1]+1;
	return 0;
}

  

欧拉函数有几个比较常用的应用,比如说杜教筛等

P2158 [SDOI2008] 仪仗

标签:prime,函数,int,long,欧拉,euler
From: https://www.cnblogs.com/zhanghx-blogs/p/17536068.html

相关文章

  • C++黑马程序员——P189-192. string容器 构造函数,赋值,拼接,查找和替换
    P189.string容器——构造函数P190....——赋值操作P191....——字符串拼接P192....——字符串查找和替换P189.构造函数———————————————————————————————————————————————————————————————......
  • python函数进阶
    Python函数进阶一、函数多返回值1.1多个返回值如果一个函数要有多个返回值,该如何书写代码?"""演示函数的多返回值示例"""#演示使用多个变量,接受多个返回值deftest_return():return1,"hello",Truex,y,z=test_return()print(x)#1print(y)#hello......
  • # Python_函数专题(一)
    目录函数基础基础函数调用参数返回值变量承接print定义函数定义函数的格式函数嵌套函数调用死循环函数参数单参数双参数报错指定参数类型函数文档注释函数返回值Return定义带有返回值的参数返回多个值函数基础基础函数的基础理论函数,即一段具有特定功能的代码块调用函数,即......
  • 006 学习笔记--内置函数 | 字符串函数 + 数值函数 + 日期函数 + 流程控制函数(if ifnu
    函数:是指一段可以直接被另一段程序调用的程序或代码。MySQL内置函数: 字符串函数-------------------------------mysql内置函数--字符串函数-------------------------------字符串拼接--CONCAT(str1,str2,...)selectCONCAT('I','love','you');--returnIlove......
  • 崎岖行者 js的中的函数(三)
    方法什么是js的方法?简单讲,绑定到对象的函数就是方法。this在对象的方法中,我们常常使用this关键字。this关键字代表方法所绑定的对象。varwangqiang={name:"wangqiang",age:18,city:"guangzhou",address:"tianhe",//......
  • BZOJ 1022: [SHOI2008]小约翰的游戏John SG函数 Anti−SG
    1022:[SHOI2008]小约翰的游戏JohnTimeLimit: 1Sec  MemoryLimit: 162MBSubmit: 2667  Solved: 1701[Submit][Status][Discuss]Description小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一......
  • 文件光标及修改/函数
    文件内光标的移动(了解)1.关于read创建一个文件是a.txt,里面是:大家好hellowithopen(r'a.txt','r',encoding='utf8')asf:print(f.read(3))#read在文本模式下是读取指定字符个数大家好withopen(r'a.txt','rb')asf:print(f.read(9).dec......
  • MySQL中常用的字符串函数
    1.字符串拼接concat(str1,str2,...):将str1,str2...等多个字符串拼接成一个长字符串,如果有任何一个参数为NULL,则返回值为NULLconcat_ws(separator,str1,str2,...):指定分隔符,将多个字符串拼接成一个长字符串,如果有任何一个参数(包括分隔符)为NULL,则返回值为NULLgroup_concat(dis......
  • C++ 中的函数重载
     在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。https://www.121mu.com/bkjq211/......
  • 【快应用】快应用学习之页面周期函数onBackPress无法触发?
    ​【关键词】onBackPress、退出提示 【问题背景】在学习和调试快应用的过程中,我在子页面中的onBackPress()函数中定制了退出的一个弹框提醒,将它作为组件引入父页面中,弹框却无法触发?问题代码如下:子页面<template><!--Onlyonerootnodeisallowedintemplate.--><......