C语,编一个程序,输出1000以内所有素数。要求:设计一个函数,专门用于判断数值为素数。2 将素数每行8个

格式输出#include<stdio.h>intisPrime(inta[]);voidoutput(inta[]);#definen1000voidmain(){int... 格式输出

#include <stdio.h>
int isPrime(int a[]);
void output(int a[]);
#define n 1000
void main()
{
int a[n];
a[n]=isPrime(a);
output(a);
}

int isPrime(int a[n])
{
int i,x;
for(i=2;i<1000;i++){
for(x=2;x<i;i++){
if(i%x==0)
break;
if(i==x)
return a[n];
}
}
}

void output(int a[n])
{
int i;
while(a[n]!='\0'){
for(i=1;i<=n;i++){
if(i%8==0)
printf("\n");
else
printf("%4d",&a[i]);
}
}
}

求高手看看哪错了
展开
 我来答
听不清啊
高粉答主

2013-11-16 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

:改进后的程序效率大为提高判断997是素数只要循环到31即可结束,判断1000不是素数只要循环到2即可结束。同时不再需要使用数组。包含math.h是为了计算平方根。

#include <stdio.h>

#include <math.h>

int isPrime(int a);

void output(int a);

#define n 1000

void main()

{

int i,k=0;

for(i=2;i<=n;i++)

{

 if(isPrime(i))

 {

   printf("%4d",i);

   if(++k%8==0)

     printf("\n");

 }

}

printf("\n");

}


int isPrime(int a)

{

int i,x;

for(i=2;i<=sqrt(a);i++)        /*改进后的函数效率大为提高*/

 if(a%i==0)return(0);

return 1;

}


追问
两个问题:1.为什么求素数跟平方根有关系
2.int a被定义后并未说明大小,为什么后面可以直接使,(i<=sqrt(a)),那么a到底是从几开始的呢?又到几截止,不太明白
追答
  1. 为了减少判断次数。以997为例,根号997=31.6,只要从2到31不能整除997,就能判定997是一个素数。如999不是素数,它肯定有一个因子小于根号999。

  2. int a被定义后并未说明大小,它在被调用时从形式参数中获得值(例如调用isprime(997)时,a的值就是997)。循环变量是i,它从2开始,一直到根号a为止。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式