6. 素数是一个除了 1 和它自身以外不能被任何其它数整除
的数。
int flag=1;
for(int i=2;i<a;i++)
{ 复杂度为: n
if(a%i==0)
{
flag=0;
break;
}
}
if(flag==1)
cout<<"a is a prime!!!"<<endl;
else
cout<<"a is not a prime!"<<endl;
7. Tim e 命令解释:
1 实际时间 (real):
、 从 command 命令
行开始执行到运行终止的消逝时间;
2 用户 CPU 时间 (user): 命令执行完成
、
花费的用户 CPU 时间,即命令在用户态中执
行时间总和;
3 系统 CPU 时间 (system): 命令执行完
、
成花费的系统 CPU 时间,即命令在核心态中
执行时间总和。
8.
9. #!/bin/bash
echo "input a:“ if [ "$flag" -eq 1 ]
read a then
i=2 echo "a is a prime!“
flag=1 else
for ((;i<a;i++)) echo "a is not a prime!“
do fi
let "z=a%i“
if [ "$z" -eq 0 ]
then
let "flag=0“ 复杂度为: n
break
fi
done
10.
11.
12.
13. #!/bin/bash
then
echo "input a:“ let
read a "flag=0“
i=2 break
fi
flag=1
let "k=i*i“
k=0 done
let "k=i*i “ if [ "$flag" -eq 1 ]
for((i=2;k<a;i++)) then
echo "a is a prime!“
do else
let "z=a%i“ echo "a is not a prime!"fi
if [ "$z" -eq 0 ]
14.
15. int prime(long int k) int main()
{
{
long int m=10000;
for(int i=2;i<k;i++) long int a[10000];
{ if(k%i==0) int flag;
return 0; a[0]=1;
} for(int i=2;i<m;i++)
return 1; {
} flag=prime(i);
if(flag==1)
cout<<i<<endl;
}
system("pause");
return 0;
}
16. #!/bin/bash
k=0
echo "please input a:"
read a
sed -n '/$a/p' test.text > primes.txt
if [ -s primes.txt ]
then
echo "a is a prime!"
else
echo "a is not a prime!"
fi
17.
18. 基于费马小定理的素性测试算法
根据费马小定理:如果 p 是素数, 1<a<p ,那
么 a^(p-1) ≡ 1 mod p 。如果我们想知道 n 是否是
素数,我们在中间选取 a ,看看上面等式是否成立。
如果对于数值 a 等式不成立,那么 n 是合数。如果
有很多的 a 能够使等式成立,那么我们可以说 n 可
能是素数,或者伪素数。在我们检验过程中,有可
能我们选取的 a 都能让等式成立,然而 n 却是合数。
这时 a^(n-1) ≡ 1 mod n 等式被称为 Fermat liar 。
如果我们选取满足下面等式 a^(n-1) ≠ 1 mod n 的 a
那么 a 也就是对于 n 的合数
19.
20. //// 计算 x,y 的最大公约数
//// 随机数 b 的生成 int gcd(unsigned long
unsigned long b,unsigned long n)
random(unsigned long {
m,unsigned long n) unsigned long k=1;
{ while(k!=0)
srand((unsigned {
long)time(NULL)); k=n%b;
n=b;
return (unsigned long)
b=k;
(m+rand()%n);
}
} return n;
}
24. int RabinMillerKnl(unsigned long n)
{
unsigned long b, m, j, v, i;
j=0;
while(!(m & 1))
{
++j;
m>>=1;//m 记录 s/2 之后的奇数 t
}
b=random(2,m);
v=PowMod(b, m, n);