密码工程-小素数
1.使用OpenSSL的命令产生不少于5个素数,提交运行结果截图(5‘)
参考《密码工程》p107伪代码基于Eratosthenes算法实现 SmallPrimeList,写出测试代码与OpenSSL产生的素数对比,提交代码和运行结果截图(10 ’)
#include <stdio.h>
#define MAXNUM 500000 //求1000以内的所有素数
int weishu(int m)
{
int bits=0;
int i;
for(i=0;;i++)
{
if(m!=0)
{
m=m/2;
bits++;
}
else
break;
}
return bits;
}
int main()
{
int i, j, c = 0;
int prime[MAXNUM+1];//定义一个数组用来保存素数
for (i = 2; i <= MAXNUM; i++)//初始化数组
{
prime[i] = 1;//标志为1的是素数
}
for (i = 2; i*i <= MAXNUM; i++)//循环处理前i个
{
if (prime[i] == 1)//若为素数,则进行筛选
{
for (j = 2 * i; j <= MAXNUM; j++)
{
if (prime[j]==0)//去掉合数
{
continue;
}
if (j%i == 0)//若不是素数,则是合数,将素数的标志更改为0
{
prime[j] = 0;
}
}
}
}
printf("请输入你想要的bit数:");
int m;
scanf("%d",&m);
for (i = 2; i < MAXNUM; i++)//输出素数的值和个数
{
if (prime[i] == 1 && m==weishu(i))
{
printf("%10d",i);
c++;
if (c % 10 == 0)
printf("\n");
}
}
printf("\n共有%d个素数",c);
return 0;
}
5位:
10位
16位的:
8位:
openssl进行验证:
10位的:
16位:
8位: