Robin-Miller测素数

Posted thusloop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Robin-Miller测素数相关的知识,希望对你有一定的参考价值。

#include <time.h>
#include<bits/stdc++.h>
#define int long long
using namespace std;
int N;
mt19937 rng(time(0));
int witness(int a, int n)
{
	int ans = 1;
	int t = n - 1;
	int x;
	while (t)
	{
		if (t & 1)ans = ans * a % n;//#define int long long
		x = a;
		a = a * a % n;
		if (a==1&&x!=1&&x!=(n-1))return 1;
		t >>= 1;
	}
	return (ans == 1) ? 0 : 1;
}
int MillerRobin(int n, int s)
{
	if (n == 2)return 1;
	if (n<2||(n&1)==0)return 0;
	int a;
	for (int i = 0; i < s; i++)
	{
		a = rng()%(n-2)+1; //#define int long long
		//a =rand() * (n - 2) / RAND_MAX + 1;
		if (witness(a, n))return 0;
	}
	return 1;
}
signed main()
{
	int n;
	while (scanf("%lld", &n) != EOF)
	{
		if (MillerRobin(n, 50))
		{
			printf("%lld is a prime!\\n", n);
		}
		else
		{
			printf("%lld is not a prime!\\n", n);
		}
	}
}

以上是关于Robin-Miller测素数的主要内容,如果未能解决你的问题,请参考以下文章

求A和B件的所有素数的和

求A和B件的所有素数的和

梦工场实验室 素数求和 神奇的素数筛选

对应数

sysbench性能压测以及mysql性能压测

C++判断素数的代码