level 8
xxqoZXY
楼主
help
输入fermart_prime(x)
判断x是否为质数。注意这是概率判断。
返回true时极有可能为质数。返回fale时不可能是质数。
输入fermart_prime(x,m)
以随机重复n次来判断x是否为质数。n省略时默认为200。
endh
function fermat_prime(x,...)
variable a,b,n=0,m=200
try
m=floor(abs(opt_argv[0]))
catch
endtry
x=floor(abs(x))
do
b=floor(sj(1,x))
a=modular(b,x-1,x)
if a!=1
return false
endif
n=n+1
until n==m
return true
endf
help
输入modular(a,b,n)进行模取幂.
a,b均为非负数,n>0
该函数相当于mod(a**b,n)
只不过速度特快
endh
function modular(a,b,n)
variable d=1,t=a
while b>0
if mod(b,2)
d=mod(d*t,n)
endif
b=floor(b/2)
t=mod(t*t,n)
loop
return d
endf
function sj(a,b)
variable x=a,y=b,c,d,f
c=rand()
if a>b
x=b
y=a
else
x=x
y=y
endif
d=y-x
f=d*c+x
return(f)
endf

2016年02月18日 04点02分
1
输入fermart_prime(x)
判断x是否为质数。注意这是概率判断。
返回true时极有可能为质数。返回fale时不可能是质数。
输入fermart_prime(x,m)
以随机重复n次来判断x是否为质数。n省略时默认为200。
endh
function fermat_prime(x,...)
variable a,b,n=0,m=200
try
m=floor(abs(opt_argv[0]))
catch
endtry
x=floor(abs(x))
do
b=floor(sj(1,x))
a=modular(b,x-1,x)
if a!=1
return false
endif
n=n+1
until n==m
return true
endf
help
输入modular(a,b,n)进行模取幂.
a,b均为非负数,n>0
该函数相当于mod(a**b,n)
只不过速度特快
endh
function modular(a,b,n)
variable d=1,t=a
while b>0
if mod(b,2)
d=mod(d*t,n)
endif
b=floor(b/2)
t=mod(t*t,n)
loop
return d
endf
function sj(a,b)
variable x=a,y=b,c,d,f
c=rand()
if a>b
x=b
y=a
else
x=x
y=y
endif
d=y-x
f=d*c+x
return(f)
endf
