poj1284:欧拉函数+原根
何为原根?由费马小定理可知 如果a于p互质 则有a^(p-1)≡1(mod p)对于任意的a是不是一定要到p-1次幂才会出现上述情况呢?显然不是,当第一次出现a^k≡1(mod p)时, 记为ep(a)=k 当k=(p-1)时,称a是p的原根每个素数恰好有f(p-1)个原根(f(x)为欧拉函数) 定理:对于奇素数m, 原根个数为phi(phi(m)), 由于phi(m)=m-1, 所以为phi(m-1)。某大牛的证明:
{xi%p | 1 <= i <= p - 1} = {1,2,...,p-1} 等价于 {xi%(p-1) | 1 <= i <= p - 1} = {0,1,2,...,p-2},即为(p-1)的完全剩余系
若x,x2...x(p-1)是(p-1)的完全剩余系,
根据定理,可以推出若gcd(x, p-1) = 1时, (1,x,...,x(p-2))也是(p-1)的完全剩余系
因为若xi != xj (mod p-1),那么x*xi != x*xj (mod p-1),与条件m矛盾,所以 xi = xj (mod p-1),
由此可以确定答案为EulerPhi(p-1)
代码
#include<stdio.h> #define maxn 66666 int euler[maxn+1]; int phi(int n) {int res=n;for(int i=2;i*i<=n;i++){if(n%i==0){res=res-res/i;while(n%i==0)n/=i;}}if(n>1)res=res-res/n;return res; } //筛法范围打表 nlogn void phi() {for(int i=1;i<=maxn;i++)euler[i]=i;for(int i=2;i<=maxn;i+=2)euler[i]/=2;for(int i=3;i<=maxn;i++){if(euler[i]==i) //未被筛到。是素数,则用此素数来筛 {for(int j=i;j<=maxn;j+=i){euler[j]=euler[j]/i*(i-1);}}}return ; } int main() {int n;phi();while(scanf("%d",&n)!=EOF){printf("%d\n",euler[n-1]);} }
转载于:https://www.cnblogs.com/oneshot/p/3979863.html
poj1284:欧拉函数+原根相关推荐
- POJ - 1284 Primitive Roots(原根+欧拉函数)
题目链接:点击查看 题目大意:给出一个模数 p ,求 p 有多少个原根 题目分析:算是补充了一个知识点吧,模数 p 的原根个数为 p[ p[ n ] ] ,p 为欧拉函数 证明博客:https://b ...
- 原根(扩展欧几里得+欧拉函数)
1135 原根 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m)表示m的欧拉函数) ...
- c++实现求解欧拉函数和本原根
计算本原根 这里我不详细解释欧拉函数和本原根. 首先我们先了解求一个数的本原根的过程,以25为例: 25的本原根 1.在计算25的所有本原根时,首先我们要得到25的欧拉函数值可以知道25=5^2,其欧 ...
- 初等数论--同余--欧拉函数、欧拉定理、费马小定理
初等数论--同余--欧拉函数.欧拉定理.费马小定理 概念 同余类,既约同余类 欧拉函数 完全剩余系,既约剩余系 关于完全剩余系.既约剩余系一些比较简单的定理 欧拉定理.费马小定理 博主是初学初等数论( ...
- 中高级数论 [欧拉函数线性筛,二次剩余]
欧拉函数线性筛 对于素数ppp, φ(p∗i)={p−1i=1p∗φ(i)p∣i(p−1)∗φ(i)p∤i\varphi (p*i)= \begin{cases} p-1& i=1\\ p*\ ...
- 积性函数欧拉函数莫比乌斯函数
积性函数 (积性函数). 如果算术函数fff对任意两个互素的正整数a和b,f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b),则fff被称为积性函数(或乘性函数):如 ...
- 容斥原理与欧拉函数与莫比乌斯函数,狄利克雷卷积与莫比乌斯变换,反演
莫比乌斯函数可以看成是一种被内化了的容斥原理,许多数论上的结论定理根据容斥原理和数学归纳法可以推导出来,但是有关容斥原理的表达式的构造往往并不容易,运气不好很难找到,而莫比乌斯函数则是巧妙的把容斥原理 ...
- poj2154-color-polyan次二面体+欧拉函数优化
N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) 1 /*-------------------------- ...
- hdu 1286( 欧拉函数 )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1286 数学题真的是有点吃不消了... View Code 1 #include<iostream ...
最新文章
- Python,Pandas,Bokeh Cheat Sheet-Data Science
- Silverlight 5 Beta 新特性预览
- egg前面加什么_跟 egg 有关的英语多半是贬义,goose egg 也八九不离十
- (扩展)欧几里德快速幂
- linux带宽最小的远程桌面,【图片】linux下哪种远程桌面服务最快?_linux吧_百度贴吧...
- php写入rabbit速度,RabbitMQ 入门教程(PHP) 实现延迟功能
- Vue前端路由(Vue-router)
- java获取资源文件的各种方法
- JS_call_APP native 与 html的交互
- 水晶报表之创建子报表
- (精华2020年5月12日更新) vue实战篇 axio.js封装和环境配置
- Airbnb如何应用AARRR策略成为全球第一民宿平台
- Python批量自动下载获取图片
- 利用Jquery自动生成条形码
- 当Idea的主菜单被不小心隐藏。
- unity 捕鱼达人鱼群的移动
- scipy稀疏矩阵lil_array
- 不完全免疫算法简介AIMA--AIS学习笔记7
- 【Linux练习生】进程间通信
- Low-Rank Solution of Lyapunov Equations(一)ADI算法