• 51nod 1106 质数检测(miller rabin 素数测试.)


    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     收藏
     关注
    给出N个正整数,检测每个数是否为质数。如果是,输出"Yes",否则输出"No"。
     
    Input
    第1行:一个数N,表示正整数的数量。(1 <= N <= 1000)
    第2 - N + 1行:每行1个数(2 <= S[i] <= 10^9)
    Output
    输出共N行,每行为 Yes 或 No。
    Input示例
    5
    2
    3
    4
    5
    6
    
    Output示例
    Yes
    Yes
    No
    Yes
    No

    miller rabin 素数测试...
     1 /*************************************************************************
     2     > File Name: code/51nod/1106.cpp
     3     > Author: 111qqz
     4     > Email: rkz2013@126.com 
     5     > Created Time: 2015年10月19日 星期一 18时51分06秒
     6  ************************************************************************/
     7 
     8 #include<iostream>
     9 #include<iomanip>
    10 #include<cstdio>
    11 #include<algorithm>
    12 #include<cmath>
    13 #include<cstring>
    14 #include<string>
    15 #include<map>
    16 #include<set>
    17 #include<queue>
    18 #include<vector>
    19 #include<stack>
    20 #include<cctype>
    21                  
    22 #define yn hez111qqz
    23 #define j1 cute111qqz
    24 #define ms(a,x) memset(a,x,sizeof(a))
    25 using namespace std;
    26 const int dx4[4]={1,0,0,-1};
    27 const int dy4[4]={0,-1,1,0};
    28 typedef long long LL;
    29 typedef double DB;
    30 const int inf = 0x3f3f3f3f;
    31 
    32 bool witness(LL a,LL n)
    33  {
    34     LL t,d,x;
    35  d=1;
    36  int i=ceil(log(n-1.0)/log(2.0)) - 1;
    37  for(;i>=0;i--)
    38  {
    39  x=d; d=(d*d)%n;
    40  if(d==1 && x!=1 && x!=n-1) return true;
    41  if( ((n-1) & (1<<i)) > 0)
    42  d=(d*a)%n;
    43  }
    44  return d==1? false : true;
    45  }
    46 bool miller_rabin(LL n)
    47  {
    48  if(n==2) return true;
    49  if(n==1 || ((n&1)==0)) return false;
    50  for(int i=0;i<50;i++){
    51  LL a=rand()*(n-2)/RAND_MAX +1;
    52  if(witness(a, n)) return false;
    53  }
    54  return true;
    55  }
    56 int main()
    57  {
    58      
    59  int n,cnt;
    60  LL a;
    61  while(scanf("%d",&n)!=EOF)
    62  {
    63  cnt=0;
    64  while(n--)
    65  {
    66  scanf("%lld",&a);
    67  if(miller_rabin(a))
    68  puts("Yes");
    69  else 
    70      puts("No");
    71  }
    72 // printf("%d
    ",cnt);
    73  }
    74  return 0;
    75  }
    View Code
  • 相关阅读:
    Chrome 请求过滤扩展实现
    【译】Chrome 扩展 : 入门
    【译】Chrome 扩展 : 扩展是什么?
    【译】Chrome 扩展 : 欢迎
    事务处理
    nrm ls报错解决办法
    Typescript学习总结
    常用插件收藏
    css 设置滚动条样式
    vscode 常用插件
  • 原文地址:https://www.cnblogs.com/111qqz/p/4892758.html
Copyright © 2020-2023  润新知