求c语言程序 求1000以内的素数 100

 我来答
White_MouseYBZ
2017-08-09 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6282万
展开全部

可以编写一个素数考察函数,在主函数中调用该函数对1000以内的整数穷举考察求解,也可以在主函数中直接对1000以内的整数穷举考察求解。这里提供一个用筛选法求解的代码,思路是声明一个大于等于1000个元素的char型(int型当然也可以,这里只是为了减少空间开销)数组并全部初始化为1,对下标不是素数的元素清0,最后依次输出不为0元素的下标便是题解。为提高操作效率,用2~33间(33^2>1000了,所以考察已充分了)的素数去除大于这个素数而小于等于1000的不为0的数,能整除的便将这个下标的元素清0。当用小于33的最大素数考察完毕后,依次输出数组中不为0的元素下标即可。代码如下:

#include "stdio.h"
int main(int argc,char *argv[]){
int i,j;
char m[1001];//声明char型数组作为筛选对象
for(m[0]=m[1]=0,i=2;i<=1000;m[i++]=1);//m[0]和m[1]赋0,其余赋1备选
i=2;//考察次数2~33,用期间的素数去除大于i且小于等于1000间不为0的数
while((j=i)<33){
while(!m[++j]);//取j为大于i的第一个不为0的数为起始考察对象
while(j<=1000){
if(j%i==0)//这个数若能被小于它的素数整除则以它为下标的元素清0
m[j]=0;
while(!m[++j]);//下一个不为0的数为考察对象
}
while(!m[++i]);//2~33间的下一个素数
}
for(j=i=0;i<=1000;i++)//以下是输出
if(m[i])//不为0的数组元素的下标便是素数
printf(++j%20 ? "%4d" : "%4d\n",i);//每行输出20个
if(j%20)
printf("\n");
return 0;
}

运行结果如下:

愚家焮5B
2015-10-28 · 超过23用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:29.3万
展开全部
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
int prime(int n)
{
  int i,r;
  int flag=0;
  for(i=2;i<=sqrt(n);i++)
  {
    if( n%i==0)
    {
      flag=1;
      break;
    }
  }
  return flag;
}
int main()
{
  int n,k;
  for(n=2;n<=1000;n++)
  {
    k=prime(n);
    if(k==0)
      printf("%5d",n);
  }
  return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式