c语言,用筛选法求100之内的素数?请好好解释下怎么求解。急。明天要交。

如题所述

void calc_prime()
{
for (int i = 2;i<=MaxPrime;i++) isprime[i] = 1;
int i = 2;
while (i < MaxPrime)
{
while (i <= MaxPrime && !isprime[i]) i++;
if (!isprime[i]) break;
prime[++pprime] = i;
isprime[i] = pprime;
int j = i + i;
while (j <= MaxPrime)
{
isprime[j] = 0;
j += i;
}
i++;
}
//for (int i = 0;i<=100;i++) cout << prime[i] << " ";
//cout << endl;
}

就是在一定范围内每次筛去质数的倍数,最后剩下来的就是质数,具体可以参考我的程序,有不懂的可以问我
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-28
#include<math.h>
#define N 101
main(){
int i,j,line,a[N];

for(i=1;i<N;i++) a[i]=i; /*初始化数组*/

for(i=2;i<sqrt(N);i++){
for(j=i+1;j<N;j++){
if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;
}
}
printf("\n");

for(i=2,line=0;i<N;i++){
if(a[i]!=0){
printf("%5d",a[i]);
line++;
}
if(line==10){
printf("\n");
line=0;
}
}
printf("\n");
}

参考资料:http://pirlo.bokee.com/2436565.html

第2个回答  2009-03-31
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main(){
int m,k,i,n=0;
bool x;
for(m=100;m<=200;m+=2){
x=true;
k=int(sqrt(m));
for(i=2;i<=k;i++){
if(m%i==0){
x=false;
break;
}
if(x)
{
cout<<setw(5)<<m;
n+=1;
}
if(n%10==0)
cout<<endl;
}
cout<<endl;
return 0;
}

}
这题是求100到200之间的素数..楼主可以照我这个搬..我刚做的..也运行过了。 .可以的..