zoukankan      html  css  js  c++  java
  • 【HOJ1356】【Miller_rabin素性测试】Prime Judge

    Given a positive integer, your job is writing a program to determine whether it is a prime number or not.

    Input

    There are several tests. Each test consists of a positive integer n(no more than 2^31) on a single line. Input is terminated by end of file.

    Output

    For each integer in the input, print a "YES" if it is a prime number, otherwise print a "NO" instead.

    Sample Input

    4
    5
    6
    Sample Output
    NO
    YES
    NO
    【分析】
    素性测试最基本的应用,主要精髓在于费马小定理和二次探测理论。
     1 /*
     2 五代李煜
     3 《清平乐·别来春半》
     4 别来春半,触目柔肠断。砌下落梅如雪乱,拂了一身还满。
     5 雁来音信无凭,路遥归梦难成。离恨恰如春草,更行更远还生。 
     6 */
     7 #include <cstdio>
     8 #include <cstring>
     9 #include <algorithm>
    10 #include <cmath>
    11 #include <queue>
    12 #include <vector>
    13 #include <iostream>
    14 #include <string>
    15 #include <ctime>
    16 #define LOCAL
    17 const int MAXN = 100000 + 5;
    18 using namespace std;
    19 typedef long long ll;
    20 ll n;
    21 
    22 ll pow(ll a, ll b, ll p){
    23     if (b == 1) return a % p;
    24     ll tmp = pow(a, b / 2, p);
    25     if (b % 2 == 0) return (tmp * tmp) % p;
    26     else return (((tmp * tmp) % p) * (a % p)) % p;
    27 }
    28 //二次探测
    29 bool Sec_Check(ll a, ll p){
    30     ll tmp = pow(a, p, n);
    31     if (tmp != 1 && tmp != (n - 1)) return 0;//不通过
    32     if (tmp == (n - 1) || (p % 2 != 0)) return 1;
    33     return Sec_Check(a, p / 2);
    34 }
    35 bool miller_rabin(ll n){
    36     ll cnt = 20;
    37     while (cnt--){
    38         ll a = (rand()%(n - 1)) + 1;
    39         if (!Sec_Check(a, n - 1)) return 0; 
    40     }
    41     return 1;
    42 }
    43 
    44 int main(){
    45     srand(time(0));
    46     
    47     while (scanf("%lld", &n) != EOF){
    48         if (n == 1) printf("NO
    ");
    49         else if (miller_rabin(n)) printf("YES
    ");
    50         else printf("NO
    ");
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    一行代码跨平台适配颠覆传统手机建站模式
    struts2接收参数的几种形式<转>
    MyEclipse生成多对多映射文件和POJO <转>
    Hibernate延迟加载机制
    Hibernate常见面试知识点<转>
    Hibernate一级缓存详解
    App Icon and Launch Images for iOS7.0 or Later
    iOS7 UITextView 光标问题
    iOS中让颜色赋值简单一点吧
    iOS状态栏变文字颜色改变
  • 原文地址:https://www.cnblogs.com/hoskey/p/4371853.html
Copyright © 2011-2022 走看看