密码工程-小素数

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位:

 

posted @ 2021-06-03 08:18  20181217Cindy  阅读(179)  评论(0编辑  收藏  举报