题目:利用数组求出前N个质数!
思路:定义数组 primes[N] 其中 primes[0]=2
然后从num=3开始,判断一个num是否质数,是则加引入数组 primes[N] 中
判断一个num是否质数:如果数组中的元素均不能整除这个num,则可判断它为质数!
代码在vc++中编绎通过
#include <stdio.h>
#include <conio.h>
#define N 800 //求出前800个质数!
void main()
{
int primes[N]={2},p_number=1;
//定义数组第一个元素,p_number代表元素个数
int num,i,remainder,count=0;
//num控制数字,remainder余数,count控制输出换行
for(num=3;;num+=2) //从num=3开始循环,不考虑偶数
{
for(i=0;i<p_number;i++) //判断num是否质数
{
remainder=num%primes[i];
if(remainder == 0) break; //非质数跳出
}
if(remainder !=0)
{
primes[p_number++]=num;
}
//如果num为质数,则引入数组中
if(p_number == N) break;
}
printf("The first %d primes are: /n",N);
for(p_number=0;p_number<N;p_number++)
{
printf("%-7d",primes[p_number]);
count++;
if(count%8 == 0) printf("/n");
}
//输出,并控制每8个换行
printf("/nPress any key to Quit.../n");
getch();
}
需改进的地方:想用指针控制数组的大小,目前无能为力!
另外,代码中判断num是否质数的循环语句认为可以改进!
for(i=0;i<p_number;i++) //判断num是否质数
{
remainder=num%primes[i];
if(remainder == 0) break; //非质数跳出
}
if(remainder !=0)
{
primes[p_number++]=num;
}