Euler3:转储浮点异常核心

时间:2018-02-14 09:27:31

标签: c gcc

我在C中执行以下程序并收到错误:浮点异常(核心转储)。我删除了之前的零分错误,我有点卡在这里。提前感谢任何指示。

void main()
{
    int i=0;
    long long int num=600851475143;

    for(i=1;i<num/2;i++)
    {
        if((num%i)==0)
        {
            for(int j=1;j<i/2;j++)
            {
                if((i%j)!=0)
                    printf("%d, ",i);
                else break;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

你可以做的重要事情是

  • 制作long long int num=600851475143LL;LL后缀确保其不属于int类型。

  • for循环索引变量也应该是long long

这两项更改将确保不存在会导致未定义行为的溢出情况。

并确保在任何情况下都不会按0命中除法(同时确保正确使用%正确的操作数)。代码中断时使用断点。这将有助于您解决问题。

答案 1 :(得分:0)

使用limits.h和小的更改来解决问题。我的代码目前:

#include <limits.h>
#include <stdio.h>

int main () {

    long long int res=0, i=2;
    long long int num=600851475143;

    while (num!=1) {

        if (num%i==0) {

            while (num%i==0) {
                printf ("%lld\t", i);
                num/=i;
            }

            res=i;
        }

        i++;
     }

    printf ("\n\nThe largest prime factor is : %lld\n\n", res);

    return 0;
}