当前位置: 代码迷 >> C语言 >> [求助]求100到500间的所有素数。
  详细解决方案

[求助]求100到500间的所有素数。

热度:924   发布时间:2005-04-13 18:56:00.0
[求助]求100到500间的所有素数。
求100到500间的所有素数:

#include <stdio.h>
main()
{
int m,k,i,n=0;
  printf("\n");
  for(m=101;m<500;m+=10)
  {
   for(i=2;i<=m/2;i++)
     if(m%i==0) break;
   if(i>=m/2+1)
    {
     printf("%d ",m);
     n++;
     if(n%10==0) printf("\n");
    }
  }
return 0;
}

请问下

for(i=2;i<=m/2;i++)
     if(m%i==0) break;
   if(i>=m/2+1)
    {
     printf("%d ",m);
     n++;
     if(n%10==0) printf("\n");
    }
是什么意思啊?那个FOR循环好象没有什么用的样子?
它起什么作用?还有下面的IF语句有什么作用?麻烦那位来给讲解下,多谢谢了先。
搜索更多相关的解决方案: 素数  

----------------解决方案--------------------------------------------------------
for循环怎么会没有用呢    i 从2 循环到 m/2     在此过程中  如果 m整除 i  即  m不为素数      直接跳出循环
只有在不跳出循环的情况下  i才可能大于等于m/2+1    (我想这里用m/2会不会好点呢)
所以被打印出来的数就会是一个素数
----------------解决方案--------------------------------------------------------
我想问下~这里的:
  if(i>=m/2+1)
是什么意思啊?
理解不了~
为什么是“>”呢?
----------------解决方案--------------------------------------------------------
感谢2楼,终于得以明白,哎~我太笨了
----------------解决方案--------------------------------------------------------
3楼的问题我回答啦



那个IF是用来输出是换行用的  没有别的意思
----------------解决方案--------------------------------------------------------
第一个 if (i>=m/2+1) 起修正作用, 因为如果这个数是奇数的话,m/2会比它的一半小.
第二个 if 用来换行,即满10个数换行.
----------------解决方案--------------------------------------------------------
因为判断素数可以只判断到他的一半.就可以知道他是不是素数了。如100.最多是当你判断到50就知道了。因为判断到51的时候已经无意义了。(100/51=1).....其实他的素数求法不太好。最好是来个漏选法或者只判断到他 sqrt(m) 就已经可以了。你可以去看看c论坛里有篇经典文章。名字是    <<程序设计方法及编写优质无错C程序秘诀 >>  这篇文章里有写求素数的算法.而且作业写的非常好。我吐血推荐~~~~~~~~~~~

----------------解决方案--------------------------------------------------------
素数“漏筛法” #include<stdio.h> #define max 22500 main() { unsigned int i,range ,factor ,k; int a[max]; printf("please input the range:\n");/*指出多大范围内寻找素数*/ scanf("%d",&range); for(i=2;i<=range;i++) /*初始化*/ a[i]=1; factor=2; while(factor<=range) { if(a[factor]<=range) { printf("%d\t",factor); k=factor; while(k<=range) { a[k]=-1; k=k+factor; } } factor++; } } 坚强依然!永不言苦!永不言败!睇透数据结构!编程编程再编程!-----激情依旧
----------------解决方案--------------------------------------------------------
#include"stdio.h"
#include"math.h"
main()
{
int k,j,i,n=0,nq,ne;
printf("请输入启始值:");
scanf("%d",&amp;nq);
printf("\n请输入终止值:");
scanf("%d",&amp;ne);
  for(i=nq;i&lt;=ne;i++)
  {  k=sqrt(i);
     for(j=2;j&lt;=k;j++)
   if(i%j==0)break;
   if(j&gt;=k+1) {printf("%7d",i); n=n+1;
   if(n%10==0) printf("\n");}
  
  }
  printf("\n");
}
----------------解决方案--------------------------------------------------------
  相关解决方案