首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目Euler #7:代码中有什么问题吗?

项目Euler #7:代码中有什么问题吗?
EN

Stack Overflow用户
提问于 2014-01-04 01:18:56
回答 1查看 97关注 0票数 1

--这与Euler #7项目有关,它是关于寻找10001个素数的。

在这段代码中,如果我在第二个for循环中使用k*k<=i,程序会变得更快,但它给了我第10000个质数作为答案。但是当我使用k<=ik<=i/2时,程序变慢了,但是给出了正确的答案。

根据我的逻辑,一个特定的数字可以除以<1-the square root of that number>范围内的数字。该范围内的任何除数在范围<square root - (number/2)>中都有相应的除数。

那么,为什么我在这两种方法中得到了两个不同的答案?

下面是代码:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
    int i;
    int k;
    int x;
    int y=0;

    for(i=1;i<100000000;i++){
        x = 0;
        /*finding whether the number has more than 2 divisor(exept 1 and the number itself)*/
        for(k=1;k*k<=i;k++){
            if(i%k == 0){
                x++;
            }
        }
        if(x==2){
            y++;
        }

        if(y == 10001){ 
            printf("\n%d",i);
            break;
        }
    }

    printf("\n\n");
    return 0;
}

这是另一个:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
    int i;
    int k;
    int x;
    int y=0;

    for(i=1;i<100000000;i++){
        x = 0;
        /*finding whether the number has more than 2 divisor(exept 1 and the number itself)*/
        for(k=1;k<=i/2;k++){
            if(i%k == 0){
                x++;
            }
        }
        if(x==1){
            y++;
        }

        if(y == 10001){ 
            printf("\n%d",i);
            break;
        }
    }

    printf("\n\n");
    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-04 01:42:41

您应该使用埃拉托斯提尼,它的速度要快得多。

您的第一段代码将认为i=1是自k=1k*k <= i以来的素数(x==1),但是第二段代码将不认为它是素数,因为对于k=1k > i/2i/2是整数除数,将被截断为0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20915598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档