求pascal判断素数的米勒拉宾算法判断一个数是否为素数注意,一定要是米勒拉宾算法,暴力试除法就不用了,

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/01 01:10:30
求pascal判断素数的米勒拉宾算法判断一个数是否为素数注意,一定要是米勒拉宾算法,暴力试除法就不用了,

求pascal判断素数的米勒拉宾算法判断一个数是否为素数注意,一定要是米勒拉宾算法,暴力试除法就不用了,
求pascal判断素数的米勒拉宾算法
判断一个数是否为素数
注意,一定要是米勒拉宾算法,暴力试除法就不用了,

求pascal判断素数的米勒拉宾算法判断一个数是否为素数注意,一定要是米勒拉宾算法,暴力试除法就不用了,
Miller-Rabin算法是基于费马定理的:
如果n为质数,(a,n)=1 那么 a^(n-1)=1 (mod n)
Miller-Rabin算法就是费马定理反向的使用:
如果有足够多的a,(a,n)=1 使a^(n-1)=1 (mod n)都成立
那么n为质数
但是并不是一个完美的算法,
如果以2,3,5,7为底,在2.5*10^13以内只有3215031751这一个数是判断错误的
因为A^B可以在logB的时间复杂度内运算完
所以Miller-Rabin算法的复杂度O(logn)比起朴素O(sqrt(n))快上了非常多
程序:(你可以让p数组随机,不一定要用2,3,5,7为底)
const
p:array[1..4] of integer=(2,3,5,7);
var
n,i:longint;
f:boolean;
function exp(a,b:longint):longint; //计算a^b除以n的余数
var
t:qword;
begin
if b=0 then exit(1);
if b=1 then exit(a mod n);
t:=sqr(exp(a,b div 2)) mod n;
if b mod 2=1 then t:=t*a mod n;
end;
begin
readln(n);
f:=true;
for i:=1 to 4 do
if exp(p[i],n-1)1 then
begin
f:=false;
break;
end;
if f then writeln('YES') else writeln('NO');
end.
其中,需要自行判断n为1,2,3,5,7的情况(一开始加个if就行)
这个程序能处理出longint内所有>7的素数

求pascal判断素数的米勒拉宾算法判断一个数是否为素数注意,一定要是米勒拉宾算法,暴力试除法就不用了, Miller-Rabbin素数测试法求一个用Miller-Rabbin算法判断是否为素数的程序,注意要用PascalPascal!Pascal!Pascal!Pascal!Pascal!Pascal!Pascal!Pascal!最好有说明 求C或者C++判断一个大数是不是素数,随机产生一个大素数的算法.大素数指10的50次方以上的数,这些太小了,我用了拉兵米勒方法,就是时间复杂度太大,运算一个大数可能要1个星期,求具体算法, Pascal:用自然语言描述算法:判断数N是否为素数 判断100位的整数为素数的算法 求判断一个正整数是否是素数的算法!除了按照素数的定义逐个地试商,有没有什么高效率的算法呢?C/C++ 求判断素数的C语言程序 求100以内的素数pascal语言 求一个素数判断函数 求判断一个正整数是不是素数的高效算法 不是那种从 2一直除到n/2的那种算法 要时间复杂度低的 怎样用C++程序判断一个数是否为素数?求算法思路 不会的就不要来了.你知道什么是素数么?请你设计一个算法,判断6499是否为素数. 用do loop语句描述判断一个数是否为素数的算法的步骤 文字叙述判断一个数是否为素数的基本算法 对于一个不小于3的正整数,设计一个算法判断该正数是否是素数 判断15是否是素数的一个程序或步骤是不是一个算法? 判断一个数字是否为素数 画出算法的流程图无需设计vb算法 只需流程图 你知道什么是素数吗,请你设计一个算法,判断6499是否为素数要写出算法的步骤 第一步 …… 第二步 ……