回 帖 发 新 帖 刷新版面

主题:[讨论]一个求素数的问题

#include <stdio.h>
int main()
{
    int val,i,k;
    scanf("%d",&val);
    for(i=2;i<=val;++i)
    {
        for(k=2;k<i;++k)
        {
            if(i%k==0)
                break;
        }
        if(k==i)
            printf("%d\n",i);
        else
            continue;
    }
    return 0;
}
我想问问这段代码在逻辑上有没有错误!!

回复列表 (共5个回复)

沙发

还有就是~没有其它办法求这个的!!高手麻烦说下!!

板凳

没有逻辑错误,但是代码太罗嗦。其他方法也是有的,比如ERATOSTHENES筛选法,百度吧。
这是用这个方法写的代码,不过我就以求100以内素数作为实例吧:(随便写的,仅供参考)当然还有很多其他好的算法,lz自己查查吧

#include <stdio.h>
#define RANGE 100 
#define N 25    //至于N的设置,按情况定,往后素数越来越稀这是肯定的
int Prime_Num[N] =
{
    2, 3, 5, 7
};

const int ct_prime = 4;      //sqrt(RANGE)个素数,10以内的可以枚举,往后可以按下列方法添加

int main(int argc, char *argv[])
{
    int i, k, count;

    count = ct_prime;
    for (i = 2; i <= RANGE; ++i)
    {
        for (k = 0; k < ct_prime; ++k)
        {
            if (i % Prime_Num[k] == 0)
            {
                break;
            }
        }
        if (k == ct_prime)
        {
            Prime_Num[count] = i;
            count++;
        }
    }

    for (i = 0; i < count; ++i)
    {
        printf("%d\n", Prime_Num[i]);
    }
    return 0;
}


3 楼

怎么我感觉你写的比我的还复杂呢= =。

4 楼

欢迎加QQ群来  欢迎大家    提问
QQ群:C C++ linux 软件基地① 64222213    满   
QQ群:C C++ linux 软件基地② 93623167    没满
QQ群:C C++ linux 软件基地③ 167881329   满
QQ群:C C++ linux 软件基地④ 174551731   高级群(没满)

5 楼

算法是这样的,至于复杂,我真不知道该如何解释了、、、如果跑1亿内的素数lz想过没呢,呵呵[em9]

我来回复

您尚未登录,请登录后再回复。点此登录或注册