当前位置: 代码迷 >> C语言 >> 用C语言求2-32767的素数,谁帮下 郁闷中~
  详细解决方案

用C语言求2-32767的素数,谁帮下 郁闷中~

热度:106   发布时间:2007-12-19 17:00:54.0
原帖由 [bold][underline]StarWing83[/underline][/bold] 于 2007-12-19 16:31 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1154351&ptid=193336][/url]
这个怎么样?#include
#include

int main() {
    int i,j,m,n=0;
    for (i=2;i

这个负数都出来了!!!
----------------解决方案--------------------------------------------------------
从1到n去除n,从2到sqrt(n)去除n都浪费了好多时间啊,其实只有2除的时候有用,完全可以从3开始,用所有的奇数去除(2单独考虑),这样就可以降低一半的循环次数。
要想用更少的循环次数就用筛法!几乎每本c语言书上都有这个例题吧!
----------------解决方案--------------------------------------------------------
回复 11# 的帖子
你用什么编译器?我的代码在VC++2005上通过。
----------------解决方案--------------------------------------------------------
你删掉(float)应该就可以了,加这个是为了防止2005的error。我测试一下再说
----------------解决方案--------------------------------------------------------
程序代码:
#include<stdio.h>
#include<math.h>

int main() {
    unsigned int i,j,m,n=0;
    for (i=2;i<=32767;i++) {
        for (j=2,m=sqrt(i);j<=m && i%j;j++);
        if (j>m)printf("%5d%c",i,(++n)%12?' ':'\n');
    }
    getchar();
}
以上代码在TC2.0上通过
----------------解决方案--------------------------------------------------------
#include"stdio.h"
#include"math.h"
main()
{
   int a,b,i,flag;
  for(a=2;a<=32767;a++)
  { b=sqrt(a);
    flag=0;
    for(i=2;i<=b;i++)
    { if(a%i==0)
      { flag=1;
       break;
       }
      }
    if(flag==0)
    printf("%5d",a);
    }
  }
帮我看一下!这个程序那个地方错了!结果是个无限循环!
----------------解决方案--------------------------------------------------------
#include"stdio.h"
#include"math.h"
main()
{
   int a,b,i,flag;
  for(a=2;a<=32767;a++)
  { b=sqrt(a);
    flag=0;
    for(i=2;i<=b;i++)
    { if(a%i==0)
      { flag=1;
       break;
       }
      }
    if(flag==0)
    printf("%5d",a);
    }
  }
帮我看一下!这个程序那个地方错了!结果是个无限循环!
----------------解决方案--------------------------------------------------------
LS的 其实不应该加 break 也可以的
----------------解决方案--------------------------------------------------------
呵呵,其实那个算法的for后面;号是必须的. 空语句么.
----------------解决方案--------------------------------------------------------
原帖由 [bold][underline]C语言的深度[/underline][/bold] 于 2007-12-19 20:01 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1154636&ptid=193336][/url]
LS的 其实不应该加 break 也可以的

为什么不应该加!当然结果是一样的,但可以少做些无用功啊!
----------------解决方案--------------------------------------------------------