zoukankan      html  css  js  c++  java
  • Miller Rabbin素数测试

    步骤

    ①先写快速幂取模函数

    ②MR算法开始

    (1)传入两个参数一个是底数一个是n也就是幂数,如果n是一个合数那么可以判定,这个数一定不是素数

    (2)然后开始寻找一个奇数的n去计算,如果最后满足a^d%n=1那么这个可能就是一个素数,然后再判断k=n-1(目前数学不好不明所以)

    (3)MR结束

    ③编写check函数,传入一个参数。首先排除一些情况

    (1)是2 3 7 61(int范围内完全可以判断的底数)如果是的话return true;

    (2)是偶数,1,3的倍数或5的倍数或7的倍数所有条件并起来如果满足一个那么return false

    ④开始进行MR的判断,一般int范围内判断2,3,7,61即可

    ⑤编写主函数然后输出即可

    #include <bits/stdc++.h>
    using namespace std;
    int qpow(int a,int b,int c)
    {
    	long long ans=1;
    	long long base=a;
    	while(b)
    	{
    		if(b&1)
    		ans=ans*base%c;
    		base=base*base%c;
    		b>>=1;
    	}
    	return ans;
    }
    bool MR(int a,int n)
    {
    	int r=0,d=n-1;
    	if(!(n%a))
    	return false;
    	while(!(d&1))
    	{
    		d>>=1;
    		r++;
    	}
    	long long k=qpow(a,d,n);
    	if(k==1) return true;
    	for(int i=0;i<r;i++,k=k*k%n)
    	if(k==n-1)
    	return true;
    	return false;
    }
    bool check(int n)
    {
    	if(n==2||n==3||n==7||n==61)
    	return true;
    	if(!(n&1)||!(n%3)||!(n%5)||n==1)
    	return false;
    	if(MR(2,n)&&MR(7,n)&&MR(61,n)&&MR(3,n))
    	return true;
    	return false;
    }
    main()
    {
    	int k;
    	while(cin>>k)
    	check(k)?cout<<"Y
    ":cout<<"N
    ";
    }
    
  • 相关阅读:
    shell加载配置文件
    Shell四种运行方式(启动方式)
    Linux下Fork与Exec使用
    ln -snf 的个人理解
    利用python3将已有的某几个pptx文件的某些slides来生成新的pptx文件的范例
    如何在centos7中安装python3
    ng-include
    ng-class细说 by破狼
    AngularJS的Filter用法详解
    理解angularjs中的$emit,$broadcast和$on by Four
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/9800816.html
Copyright © 2011-2022 走看看