zoukankan      html  css  js  c++  java
  • [HDOJ1395]2^x mod n = 1(欧拉函数)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1395

    题意:给出n,找2^x mod n = 1的最小的x。

    欧拉函数是费马小定理的一个特殊应用:2^phi(x)=1 (mod x),当且仅当x为素数的时候式子成立,因为x为素数时,比x小且与x互质的数的个数为x-1,即满足费马小定理2^(x-1)=1(mod x)。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 using namespace std;
    20 #define fr first
    21 #define sc second
    22 #define cl clear
    23 #define BUG puts("here!!!")
    24 #define W(a) while(a--)
    25 #define pb(a) push_back(a)
    26 #define Rint(a) scanf("%d", &a)
    27 #define Rll(a) scanf("%I64d", &a)
    28 #define Rs(a) scanf("%s", a)
    29 #define Cin(a) cin >> a
    30 #define FRead() freopen("in", "r", stdin)
    31 #define FWrite() freopen("out", "w", stdout)
    32 #define Rep(i, len) for(int i = 0; i < (len); i++)
    33 #define For(i, a, len) for(int i = (a); i < (len); i++)
    34 #define Cls(a) memset((a), 0, sizeof(a))
    35 #define Clr(a, x) memset((a), (x), sizeof(a))
    36 #define Full(a) memset((a), 0x7f7f7f, sizeof(a))
    37 #define lrt rt << 1
    38 #define rrt rt << 1 | 1
    39 #define pi 3.14159265359
    40 #define RT return
    41 #define lowbit(x) x & (-x)
    42 #define onecnt(x) __builtin_popcount(x)
    43 typedef long long LL;
    44 typedef long double LD;
    45 typedef unsigned long long ULL;
    46 typedef pair<int, int> pii;
    47 typedef pair<string, int> psi;
    48 typedef pair<LL, LL> pll;
    49 typedef map<string, int> msi;
    50 typedef vector<int> vi;
    51 typedef vector<LL> vl;
    52 typedef vector<vl> vvl;
    53 typedef vector<bool> vb;
    54 
    55 const int maxn = 5500;
    56 LL n;
    57 LL geteular(LL x) {
    58     LL ret = 1;
    59     LL i;
    60     for(i = 1; i < maxn; i++) {
    61         ret *= 2;
    62         ret %= x;
    63         if(ret == 1) break;
    64     }
    65     return i;
    66 }
    67 
    68 int main() {
    69     // FRead();
    70     while(cin >> n) {
    71         if(n == 1 || n % 2 == 0) {
    72             printf("2^? mod %I64d = 1
    ", n);
    73             continue;
    74         }
    75         cout << "2^" << geteular(n) << " mod " << n << " = 1" << endl;
    76     }
    77     RT 0;
    78 }
  • 相关阅读:
    ajax专题
    luogu P1346 电车 最短路
    luogu P1462 通往奥格瑞玛的道路 最短路
    luogu P1328 生活大爆炸版石头剪刀布
    luogu P1315 联合权值 枚举
    luogu P1156 垃圾陷阱 背包问题
    luogu P1217 回文质数 枚举
    luogu P3650 滑雪课程设计 枚举
    luogu1209 修理牛棚 贪心
    luogu P1223 排队接水 贪心
  • 原文地址:https://www.cnblogs.com/kirai/p/5827225.html
Copyright © 2011-2022 走看看