一个很简单的数据结构题目

设计一个程序,输出所有小于等于n(n为一个大于2的正整数)的素数。要求:(1)每行输出10个素数;(2)尽可能采用较优的算法。

第1个回答  2007-11-08
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

#define HCH_N 1000

int main()
{
int i, j, num, sqrt_num, temp;
int flaglist[HCH_N];

memset(flaglist, 1, sizeof(flaglist));
printf("please input n\n");
scanf("%d", &num);
sqrt_num = sqrt(num);

for(i = 2; i <= sqrt_num; i++)
{
if(flaglist[i])
{
temp = num / i;

for(j = 2; j <= temp; j++)
{
flaglist[j * i] = 0;
}
}
}
flaglist[2] = 0;

for(i = 1, j = 1; i <= num; i++)
{
if(flaglist[i])
{
printf("%3d ", i);
if(j++ % 10 == 0)
{
printf("\n");
}
}

}
printf("\n");
return 0;
}
//筛选法应该是效率很高的了
第2个回答  推荐于2017-09-04
#include<stdio.h>
main()
{
int i,j,n,k=0;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
for(j=2;j<i;j++)
if(i%j==0) break;
if(i==j)
{ printf("%5d",i);k++;
if(k%10==0) printf("\n");
}
}

}本回答被提问者采纳
第3个回答  2020-04-19
#include
#include
#include
#include
#include
#define
HCH_N
1000
int
main()
{
int
i,
j,
num,
sqrt_num,
temp;
int
flaglist[HCH_N];
memset(flaglist,
1,
sizeof(flaglist));
printf("please
input
n\n");
scanf("%d",
&num);
sqrt_num
=
sqrt(num);
for(i
=
2;
i
<=
sqrt_num;
i++)
{
if(flaglist[i])
{
temp
=
num
/
i;
for(j
=
2;
j
<=
temp;
j++)
{
flaglist[j
*
i]
=
0;
}
}
}
flaglist[2]
=
0;
for(i
=
1,
j
=
1;
i
<=
num;
i++)
{
if(flaglist[i])
{
printf("%3d
",
i);
if(j++
%
10
==
0)
{
printf("\n");
}
}
}
printf("\n");
return
0;
}
//筛选法应该是效率很高的了
第4个回答  2020-09-24
int
第5个回答  2020-09-15
#include
main()
{
int
i,j,n,k=0;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
for(j=2;j
评论
0
5
加载更多
相似回答