注册 登录
编程论坛 数据结构与算法

输出10000以内的素数,程序无错,求优化。

wo叫xiao宝 发布于 2012-11-22 19:10, 875 次点击
#include <stdio.h>
#include <math.h>
void main()
{
    int j=0,n,k,i,flag;
    printf("\n");

    for(n=1;n<10000;n=n+2)
    {
        k=sqrt(n);
        flag=0;
        i=2;
       while((i<=k)&&(flag==0))
        {
        if(n%i==0)
           flag=1;
          i=i+1;
        }
       if(flag==0)
        {
          j=j+1;
          printf("%5d",n);
            if(j%10==0)
              printf("\n");
        }
    }
    printf("\n");

}


输出10000以内的素数。。。求优化!!!
7 回复
#2
矿大李威2012-11-22 22:37
# include <stdio.h>
# include <math.h>

int main(void)
{
    int i = 4;
    int t;
printf("2 3\n");

    for (i; i<=10000; i++)
    {
        t = sqrt(i);
        if (i%2 == 0 || i%3==0 || i%5==0 || i%7==0)
            continue;
        for (int j=11; j<=t; j++)
             {
               if (i%j == 0)
                   break;
             }
        if (j == t+1)
            printf("%d\n", i);

    }
    return 0;
}
#3
一个孩子2012-11-22 22:37
可以啦,还要优化到啥地步啊,这是经典的方法了,有更好的话应该早就取代他了吧
#4
wo叫xiao宝2012-11-24 22:11
我想用数组来优化他,但不知怎么弄
#5
whhguo2012-11-24 23:20
定义一个数组,长度设为200,把前面得到的素数存在里面,判断的时候直接除以遍历该数组,就行了。。。
本人java,用C写不来...
#6
mystery10212012-11-30 20:11
程序代码:
#include <iostream>
using namespace std;
int a[10001];
int main()
{
    int i,j,n;
    while(cin >> n)
    {
        for(i = 2 ; i <= n ; ++i)
        {
            if(a[i] == 0)
            {
                for(j = i + i ; j <= n ; j +=i)
                a[j] = 1;
            }
        }
   
        for(i = 2 ; i <= n ;++i)
        if(a[i] == 0)
        cout << i << ' ' ;
        cout << endl;
    }
    return 0;
}
这是输出1~n的素数,用筛选法
#7
lq10782012-12-05 07:06
#8
qq8725519692012-12-05 12:13
怎么跟C语言这么像呢
1