C语言编写一个求素数函数1至1000之间

只有图片一张做完后加分

最好解析一下

代码如下:

#include<stdio.h>
int foundit(int i) // 按照题意,定义了一个函数,判断是否素数 
{
int avg;
int k;
    avg=(int)sqrt(i);
    for (k=3;k<=avg;k+=2)   // 直接从 3 开始,因为 i 是奇数。 
        if (i % k ==0)  // 余数为0,说明不是素数 
            return 0;
    return 1;
}

int main()
{
    int i; // 循环变量
    int sushu=2; // 2是素数,直接保存下来。 

    for(i=3;i<1000;i+=2)    // 扫描 3 到 1000 之间的所有奇数 
    {
     if(foundit(i)==1)
        {
         if(i-sushu==2)
         printf("%d 和 %d、",sushu,i);
        sushu=i;
        }
    }
    return 0;
}

运行的结果:

3和5、5和7、11和13、17和19、29和31、41和43、59和61、71和73、101和103、107和109、137和139、149和151、179和181、191和193、197和199、227和229、239和241、269和271、281和283、311和313、347和349、419和421、431和433、461和463、521和523、569和571、599和601、617和619、641和643、659和661、809和811、821和823、827和829、857和859、881和883

追问

vc提示有错误不管他了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-14
#include<stdio.h>
#include<string.h>
int main()
{
typedef int bool;
const int true=1;
const int false=0;/*写多了C++用bool习惯了*/
int i,j;
bool s[1001];/*s[i]==false表示i为素数*/
memset(s,0,sizeof(s));
for(i=1;i<=1000;i++){/*一遍循环枚举所有可能的数*/
if(!s[i]){/*合数的倍数已经计算过,不用再算*/
for(j=2;j*i<=1000;j++){/*第二遍循环枚举i的倍数*/
s[i*j]=true; /*标记合数*/
}
}
}
for(i=1;i<=998;i++){
if((!s[i]) && (!s[i+2])){/*如果i和i+2都是合数*/
printf("%d %d\n",i,i+2);/*输出*/
}
}
return 0;
}追问

有错误

第2个回答  推荐于2016-07-30
#include<stdio.h>
int p[1000]={2};
void P(){
int i,j,k,s,d;
for(i=1;i<1000&&p[i-1]<1000;i++)
for(j=p[i-1]+1;;j++){
d=1;
for(k=0;k<i;k++)
if(j%p[k]==0)d=0;
if(d){
p[i]=j;
break;}}
for(i=0;i<1000&&p[i+1]<1000;i++)
if(p[i]+2==p[i+1])printf("%d %d\n",p[i],p[i+1]);}
int main(){
P();
return 0;}追问

编译通过

本回答被提问者采纳
相似回答