素数是一种除了拥有它本身和1以外作为因数,没有其它整因数的数。
这种数有着非常重要的应用。特别是在密码学领域,RSA是一种分组密码,其理论基础是一种特殊的可逆模指数运算,其安全性基于分解大整数n=pq的困难性,而这个困难主要来源于大素数p和q。
目前并没有直接产生大素数的方法,只能通过随机选择再验证的方式确定大素数。主要有三种:暴力试除法、改进试除法以及统计素性检测法。
下面分别说明各种求解算法的特点及代码实现。
暴力试除法,顾名思义,就是将比待检验数小的整数全部被该数试除一次,如果能被整除,则说明该数不是素数。这种方法的时间复杂度随待检验数的增大而增大,为O(n)。
代码实现如下:
int find_premi_01(unsigned int num){
unsigned int i = 1;
printf("This function is "暴力试除法"\n");
if(num <= 1){
printf("Input error!\n");
return 0;
}
for(i=2;i<num;i++){
if(num % i ==0){
printf("%d is not premi!\n",num);
printf("%d can be mod by %d!\n",num,i)</