zoukankan      html  css  js  c++  java
  • 【Template】Miller Rabin

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<cmath>
     6 #include<vector>
     7 //#include<stack>
     8 #include<bitset> 
     9 #define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a))
    10 #define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a))
    11 #define Ii inline int
    12 #define Iv inline void
    13 #define Il inline long long
    14 #define Ib inline bool
    15 #define INF 0x7ffffff
    16 #define re register
    17 #define ll long long
    18 #define Max(a,b) ((a)>(b)?(a):(b))
    19 #define Min(a,b) ((a)<(b)?(a):(b))
    20 #define Cmin(a,b) ((a)=(a)<(b)?(a):(b))
    21 #define Cmax(a,b) ((a)=(a)>(b)?(a):(b))
    22 #define Fill(a,b) memset((a),(b),sizeof((a)))
    23 #define D_e_Line printf("
    -------------
    ");
    24 #define D_e(x) printf("
    ______%d_______
    ",x)
    25 #define Pause() system("pause")
    26 using namespace std;
    27 Ii read(){
    28     int s=0,f=1;char c;
    29     for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1;
    30     while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar();
    31     return s*f;
    32 }
    33 template<class T>Iv print(T x){
    34     if(x<0)putchar('-'),x=-x;
    35     if(x>9)print(x/10);
    36     putchar(x%10^'0');    
    37 }
    38 int base[3]={2,7,61};
    39 ll Pow(ll a,ll b,ll mod){
    40     ll s=1;
    41     while(b){
    42         if(b&1)s=(s*a)%mod;
    43         a=a*a%mod,b>>=1;
    44     }
    45     return s%mod;
    46 }
    47 Ib Miller_Rabin(ll n){
    48     if(n==2||n==7||n==61)return 1;
    49     if(n<2||n%2==0||n%7==0||n%61==0)return 0;
    50     R(i,0,2){
    51         int flag=0;
    52         ll a=base[i];
    53         ll tmp=n-1;int k=0;
    54         while(tmp%2==0)
    55             ++k,tmp>>=1;
    56         ll x=Pow(a,tmp,n);
    57         if(x==1||x==n-1){flag=1;continue;}
    58         while(k--){
    59             x=x*x%n;
    60             if(x==n-1){
    61                 flag=1;break;
    62             }
    63         }
    64         if(!flag)return 0;
    65     }
    66     return 1;
    67 }
    68 int main(){
    69     int n=read(),T=read();
    70     while(T--){
    71         (Miller_Rabin(read())==1)?
    72             printf("Yes
    "):
    73             printf("No
    ");
    74     }
    75     return 0;
    76 }
    Miller Rabbin.cpp
  • 相关阅读:
    Leetcode 16.25 LRU缓存 哈希表与双向链表的组合
    Leetcode437 路径总和 III 双递归与前缀和
    leetcode 0404 二叉树检查平衡性 DFS
    Leetcode 1219 黄金矿工 暴力回溯
    Leetcode1218 最长定差子序列 哈希表优化DP
    Leetcode 91 解码方法
    Leetcode 129 求根到叶子节点数字之和 DFS优化
    Leetcode 125 验证回文串 双指针
    Docker安装Mysql记录
    vmware虚拟机---Liunx配置静态IP
  • 原文地址:https://www.cnblogs.com/bingoyes/p/10327881.html
Copyright © 2011-2022 走看看