我在Swift 4中收到如下错误:

时间:2018-02-22 17:06:18

标签: swift xcode swift4 prime-factoring

执行被中断,原因是:

  

EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)。

该过程一直处于中断状态,使用thread return -x返回表达式评估之前的状态

import UIKit

func numberWhosePrimeFactorIsNeeded(_ number : Int) {
    var a = 1

    for primefactor in 2...600851475143 where number % primefactor == 0 {
        let c = a * primefactor

        if c == 600851475143 {
            print(primefactor)
        } else {
            a = c
        }
    }
}
numberWhosePrimeFactorIsNeeded(600851475143)

只有当我var a >=1; if a = 0没有显示时才会出现错误。即使存在错误,代码也会一直运行到最后。

1 个答案:

答案 0 :(得分:2)

你正在溢出Int。这是(a, primefactor)所采用的路径:

1 71
71 839
59569 1471
87625999 6857
6857  // <-- a prime factor gets printed, then it continues....
87625999 59569
5219793134431 104441
545160414753108071 486847

545160414753108071 * 486847太大而无法放入Int。