把lim的所有质数放进aa数组。
此函数返回获得的素数的个数,最后打印这些素数。
这是我的代码。
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#define MAX 100
int func(int lim,int aa[MAX])
{
int i,count,num;
num = 0;
for(count = 2;count<lim;count++)
{
for(i=2;i<=sqrt(count);i++)
{
if(count%i==0)
break;
}
if(i>sqrt(count))
{
aa[num]=i;
num++;
}
}
return num;
}
int main()
{
int limit,i,sum;
int aa[MAX];
printf("Please input an integer:");
scanf("%d",&limit);
sum=func(limit,aa);
for(i=0;i<sum;i++)
{
if(i%10==0&&i!=0)
printf("\n");
printf("%5d",aa[i]);
}
return 0;
}
不幸的是,我运行程序时得到的结果并没有达到预期。
错误是每次运行结果的第一个数字都是 * 2 *,最后一个数字丢失
例如:
应该是2 3 5.
1条答案
按热度按时间olhwl3o21#
避免整数问题的浮点数学
不要使用
sqrt()
。找到
MAX
值后不再迭代我建议使用
isprime()
辅助函数来简化代码。