√n求单值欧拉函数
基本定理:

首先看一下核心代码:
核心代码

原理解析:
当初我看不懂这段代码,主要有这么几个问题:
1.定理里面不是一开始写了一个n*xxx么?为什么代码里没有*n?
2.ans不是*(prime[i]-1)么?为什么到了第二个while循环变成*prime[i]了?
3.定理里面不是要/pi么?为什么代码里没有/pi?????????????
公式化简
首先我们来分析一下整个程序的原理,如果把程序的原理搞明白了,这三个问题也就自然而然的解决了
这个程序的原理是基于唯一分解定理:

那么我们可以把n拆开,再带回到欧拉函数公式中,然后再约分一下:

LaTex代码:
ans=p_1^a^*p_2^a^*.......*p_i^a^i*\frac{p_1-}{p_1}*\frac{p_2-}{p_2}*....*\frac{p_i-}{p_i}
\newline
=p_1^a^*\frac{p_1-}{p_1}*.......*p_2^a^*\frac{p_2-}{p_2}*....p_i^a^i*\frac{p_i-}{p_i}
\newline
=p_1^a^{-}*({p_1-})*.......*p_2^a^{-}*({p_2-})*....p_i^a^{i-}*({p_i-})
解答问题
首先这里的代码实现还有一个小技巧:
我们在while之前把x/prime[i],这就相当于让ans少*一个prime[i],这样就可以解决求指数ai-1的问题了
现在再回去看一下刚开始的三个问题,仔细想一想
提示:
下面有答案,
但请认真思考以后再看,
答案在下面:
1.定理里面不是一开始写了一个n*xxx么?为什么代码里没有*n?
因为n被唯一分解了,while循环里面的内容就是用来*n的
2.ans不是*(prime[i]-1)么?为什么到了第二个while循环变成*prime[i]了?
*prime是为了让答案最终*n
3.定理里面不是要/pi么?为什么代码里没有/pi?????????????
被化简了,不明白的可以看上面的化简过程
完整代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int MAXN=;
int prime[MAXN];
int mu[MAXN]= {,};
int n;
int tot=;
int vis[MAXN]= {,};
void read(int &n) {
char c='+';
int x=;
bool flag=;
while(c<''||c>'') {
c=getchar();
if(c=='-')flag=;
}
while(c>=''&&c<='') {
x=x*+c-;
c=getchar();
}
flag==?n=-x:n=x;
}
void ou() {
for(int i=; i<=n; i++) {
if(!vis[i])
prime[++tot]=i,mu[i]=-;
for(int j=; j<=tot&&j*prime[i]<=n; j++) {
vis[i*prime[j]]=;
if((i%prime[j])==) {
mu[i*prime[j]]=;
break;
}
mu[i*prime[j]]=-mu[i];
}
}
}
int getphi(int x) {
int ans=;
for(int i=; i<=tot&&prime[i]*prime[i]<=x; i++)
{
if(x%prime[i]==)
{
ans*=(prime[i]-);
x=x/prime[i];
while(x%prime[i]==)
{
ans*=prime[i];
x/=prime[i];
}
} }
if(x>)
ans*=x-;
return ans;
}
int main() {
n=;
ou();
int c;
printf("please input the num\n");
while(cin>>c)
printf("the num`s phi is %d\n",getphi(c));
return ; }
里面还乱入了线性求莫比乌斯函数的方法,,
懒得删了,,,
结尾啰嗦几句
求单值欧拉函数就讲到这里,
其实对于这份代码还有一种很玄学的理解方法,
但是我的这种方法比较简单易懂,
而且这两种理解方法从本质上来说是一样的
这里不在赘述
最后再说一下,这里只介绍了求单值欧拉函数的方法,
实际上欧拉函数还有线性筛法(因为欧拉函数是积性函数)
有空再介绍吧
另外,因为本人是第一次接触欧拉函数,所以本文肯定有成堆的bug,如果您找出了bug,可以在评论区留言或者通过其他方式联系本人,
谢谢!
√n求单值欧拉函数的更多相关文章
- 求逆欧拉函数(arc)
已知欧拉函数计算公式 初始公式:φ(n)=n*(1-1/p1)*(1-1/p2).....*(1-1/pm) 又 n=p1^a1*p2^a2*...*ps^as 欧拉函数是积性函数 那么:φ(n ...
- O(n)求素数,求欧拉函数,求莫比乌斯函数,求对mod的逆元,各种求
筛素数 void shai() { no[1]=true;no[0]=true; for(int i=2;i<=r;i++) { if(!no[i]) p[++p[0]]=i; int j=1, ...
- (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
题目: The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- POJ 2480 (约数+欧拉函数)
题目链接: http://poj.org/problem?id=2480 题目大意:求Σgcd(i,n). 解题思路: 如果i与n互质,gcd(i,n)=1,且总和=欧拉函数phi(n). 如果i与n ...
- Bzoj-2818 Gcd 欧拉函数
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x ...
- hdu 2824 The Euler function(欧拉函数)
题目链接:hdu 2824 The Euler function 题意: 让你求一段区间的欧拉函数值. 题解: 直接上板子. 推导过程: 定义:对于正整数n,φ(n)是小于或等于n的正整数中,与n互质 ...
- UVA 10214 Trees in a Wood(欧拉函数)
题意:给你a.b(a<=2000,b<=2000000),问你从原点可以看到范围在(-a<=x<=a,-b<=y<=b)内整数点的个数 题解:首先只需要计算第一象限 ...
- 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)
P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...
- A - Bi-shoe and Phi-shoe 欧拉函数
/** 题目:A - Bi-shoe and Phi-shoe 链接:https://vjudge.net/contest/154246#problem/A 题意:每一个数都有一个得分,它的得分就是, ...
随机推荐
- [UWP]缓存Lottie动画帧
在上一篇博文<[UWP]在UWP平台中使用Lottie动画>中我简单介绍了一下LottieUWP项目以及如何使用它呈现Lottie动画,这篇文章里我们来讲点进阶的东西--缓存Lottie动 ...
- 另一个画风的GSS1 - Can you answer these queries I(猫树)
前言 其实我觉得你看猫锟的解释也看不懂(主要是还有一些不良心的讲解者不讲清楚,当然这里不是针对了qwq) 猫锟链接 Solution 考虑我们的线段树是个啥玩意? 每一层都是一堆区间叠在一起. 我们在 ...
- three.js 一幅图片多个精灵
https://blog.csdn.net/zhulx_sz/article/details/79105359 核心代码 // 把一幅外部图片中包含的5种精灵存入一个精灵材质数组 var sprite ...
- 手动封装on,emit,off
on 绑定 emit 触发 off 解绑 //存放事件eventList = {key:valhandle:[]} 1对多on(eventName,callback);handle:-------N多 ...
- kali渗透windowsXP过程
文章来源i春秋 这只是一个演示我自己搭建的环境,但是成功率非常高的,对方可以是其系统,首先我开启kali在打开kali终端输入nmap –sP 192.168.1.1/24 这里的ip是我的网关地址你 ...
- 火狐浏览器安装 Modify Headers 插件
一.火狐浏览器插件安装 这里以火狐浏览器的Modify Headers插件安装为例,展示火狐插件的安装: 1.打开火狐浏览器,右上角选择“附加组件” 2.搜索Modify Headers插件 3.安装 ...
- 微信小程序如何套用iconfont
前言 如果你在开发微信时,没有图标的话,可以到http://www.iconfont.cn/ 官方下使用图标,那么我们去使用一些吧,到官方网址下点击使用~ 下载代码即可使用,看看下载的文件吧. 如图可 ...
- JavaScript概述-第1章
目录 初始JavaScript 学会使用编辑工具 如何引入脚本代码 常用语句 常见浏览器兼容性问题 了解前端开发技术JavaScript,JavaScript的发展,JavaScript特点,Java ...
- oracle对sum出来的数字进行非空补0处理
oracle在使用函数计算式会遇到这样的情况:例如sum函数 如果计算的sum值为null,则用0替代 方法1(便于理解): select when sum(c.num) is null then ...
- Network - 互联网协议简介
珠玉在前,不在赘言 互联网协议入门(一) 互联网协议入门(二) 通信协议:HTTP.TCP.UDP 互联网协议入门 互联网协议入门深入 当你输入一个网址,实际会发生什么? Wireshark基本介绍和 ...