题目:

设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数)

给出1个质数P,找出P最小的原根。

Input

输入1个质数P(3 <= P <= 10^9)

Output

输出P最小的原根。

Input示例

3

Output示例

2

分析:

原根的板子题了。

原根知识详解: 点我萌萌哒

实现:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. const int maxn = 100000 + 131;
  5. vector<LL> Primes;
  6. bool Jug[maxn];
  7. void Make_Primes() { /// 素数打表
  8. Primes.clear();
  9. memset(Jug, false, sizeof(Jug));
  10. for(LL i = 2; i <= maxn; ++i)
  11. {
  12. if(Jug[i] == false) {
  13. Primes.push_back(i);
  14. for(LL j = i + i; j <= maxn; j += i)
  15. Jug[j] = true;
  16. }
  17. }
  18. }
  19. vector<LL> Pi;
  20. void GetPi(LL X) { /// 获得 x 的质因子
  21. Pi.clear();
  22. LL mx = Primes.size();
  23. for(LL i = 0; i < mx && Primes[i] * Primes[i] <= X; ++i)
  24. {
  25. if(X % Primes[i] == 0) {
  26. Pi.push_back(Primes[i]);
  27. while(X % Primes[i] == 0) X /= Primes[i];
  28. }
  29. }
  30. if(X > 1) Pi.push_back(X);
  31. }
  32. LL Pow(LL a, LL n, LL mod) { /// 快速幂取摸
  33. LL ret = 1;
  34. while(n) {
  35. if(n & 1) ret = ret * a % mod;
  36. a = a * a % mod;
  37. n >>= 1;
  38. }
  39. return ret;
  40. }
  41. bool JugAx(LL tmp, LL P) { /// 判断 tmp 是否是 P 原根
  42. for(int i = 0; i < Pi.size(); ++i)
  43. {
  44. if(Pow(tmp, (P-1)/ Pi[i], P) == 1)
  45. return false;
  46. }
  47. return true;
  48. }
  49. int main() {
  50. LL P;
  51. Make_Primes();
  52. while(cin >> P) {
  53. GetPi(P-1);
  54. for(LL i = 2; i <= P-1; ++i)
  55. {
  56. if(JugAx(i, P)) {
  57. cout << i << endl;
  58. break;
  59. }
  60. }
  61. }
  62. return 0;
  63. }

51nod--1135 原根 (数论)的更多相关文章

  1. 51nod 1135 原根 (数论)

    题目链接 建议与上一篇欧拉函数介绍结合食用. 知识点:1.阶:a和模m互质,使a^d≡1(mod m)成立的最小正整数d称为a对模m的阶(指数)   例如: 2^2≡1(mod3),2对模3的阶为2; ...

  2. 51nod 1135 原根

    题目链接:51nod 1135 原根 设 m 是正整数,a是整数,若a模m的阶等于φ(m),则称 a 为 模m的一个原根.(其中φ(m)表示m的欧拉函数) 阶:gcd(a,m)=1,使得成立的最小的 ...

  3. (数论)51NOD 1135 原根

    设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m)表示m的欧拉函数)   给出1个质数P,找出P最小的原根. Input 输入1个质数P(3 <= P &l ...

  4. 51nod 1135 原根(原根)

    题意 题目链接 Sol 可以证明素数的原根不会超过他的\(\frac{1}{4}\) 那么预处理出\(P - 1\)的所有的质因数\(p_1, p_2 \dots p_k\),暴力判断一下,如果$\e ...

  5. 51nod 1135 原根 就是原根...

    %%% dalao Orz ,筛素数到sqrt(n),分解ϕ(p),依次枚举判断就好了 #include<cstdio> #include<cstring> #include& ...

  6. 51Nod 1135:元根(数论)

    1135 原根  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m) ...

  7. 【51NOD】1135 原根

    [题意]给定p,求p的原根g.3<=p<=10^9. [算法]数学 [题解]p-1= p1^a1 * p2^a2 * pk^ak,g是p的原根当且仅当对于所有的pi满足g^[ (p-1)/ ...

  8. 51nod 1010 stl/数论/二分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 1010 只包含因子2 3 5 基准时间限制:1 秒 空间限制:1 ...

  9. 51 Nod 1135 原根

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m)表示m的欧拉函数) 给出1个质数P ...

  10. 51nod 约数和(数论)

    题目链接: 约数和 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 有三个下标从1到n的数组a.b.c. a数组初始全为0. b[i]=∑j|ia[j] c[i]=∑j|ib[j] ...

随机推荐

  1. JS 设计模式三 -- 策略模式

    策略模式 概念 定义一系列算法,把它们一个个封装起来. 将算法的使用与算法的实现分离开来 实现 // 加权映射关系 var levelMap = { S: 10, A: 8, B: 6, C: 4 } ...

  2. pyspider煎蛋无聊图爬取

    命令行pyspider,启动pyspider. web预览界面太小,解决方法:找到pyspider的安装路径下的debug.min.css,修改css代码: 将其中的iframe{border-wid ...

  3. svnsync同步svn

    使用svnsync实现已有版本库的镜像svn不支持分布式开发,所以把svn版本库保存在一台服务器上是不安全的.制作一个镜像svn版本库有多种方式,我采用subversion自带的svnsync程序. ...

  4. 深入Eureka/Feign/Hystrix原理学习(1)

    第一步: 创建注册中心项目,引入cloud discovery相关依赖. ①在pom文件中引入相关依赖. ②在启动类上加上@EnableEurekaServer注解,标注这是一个注 册中心. ③在ap ...

  5. .class和.getClass()的区别

    使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类 如: getClass() 返回此 Object 的运行时类. //需要有com.lpx.test.class这个类 Logger ...

  6. MIUI9 解锁并刷入TWRP后,删除解锁密码

    如果因为某种原因导致解锁密码失效(比如刷了其他ROM),还原备份回来之后,解锁密码失效了. 那么可以进入TWRP,然后通过  adb shell 进入\data\system\文件夹 用rm命令删除g ...

  7. 微言netty:不在浮沙筑高台

    1. 写作缘起 几年前,我在一家农业物联网公司,负责解决其物联网产品线.我们当时基于.net平台打造了一套实时数据采集系统,可以把数以百万级的传感器传送回来的数据采集入库并根据这些数据进行建模.在搭建 ...

  8. bzoj-1179(缩点+最短路)

    题意:中文题面 解题思路:因为他能重复走且边权都正的,那么肯定一个环的是必须走完的,所以先缩点,在重新建一个图跑最长路 代码: #include<iostream> #include< ...

  9. python中socket、进程、线程、协程、池的创建方式和应用场景

    进程 场景 利用多核.高计算型的程序.启动数量有限 进程是计算机中最小的资源分配单位 进程和线程是包含关系 每个进程中都至少有一条线程 可以利用多核,数据隔离 创建 销毁 切换 时间开销都比较大 随着 ...

  10. CAN报文 Intel 格式与Motorola 格式的区别

    当一个信号的数据长度不超过 1 个字节(8 位)时,Intel 与 Motorola 两种格式的 编码结果没有什么不同,完全一样.当信号的数据长度超过 1 个字节(8 位)时,两者的编码结果出现 了明 ...