查找倍数时被行为困扰

时间:2014-05-03 17:38:23

标签: python c++

我确信这只是我真的很愚蠢,但我正在编写的程序显示出我无法理解的行为。程序会查找一个可被1到10之间的所有数字整除的数字(这是Project Euler解决方案的前身)。

我的代码有效 - 这里是Python:

for i in range( 1, 10000 ):

    check = 1

    for j in range( 2, 10 ):
        if i % j == 0:
            continue
        else:
            check = 0
            break

    if check == 1:
        print i
        break

它正确找到最低的这个数字是2520.我希望它更高效,我想如果你只是看它是否可以被6到10的数字整除,你就会测试同样的东西。

但是,请将其更改为

for j in range( 6, 10 )

然后它返回504!我用C ++和Python编写了它们,它们都做同样的事情 - 我真的不明白!它显然是错误的 - 它显然甚至不能被10整除!

我无法理解为什么我的代码在更改时会突然停止工作。我特别不明白为什么测试6到10范围内的倍数在逻辑上不等于2到10的范围。

对于那些更偏向于c ++的人:

#include <iostream>

using namespace std;

int main(){

    for( int i = 1; i < 10000; i++ ){

        int check = 1;

        for( int j = 6; j < 10; j++ ){

            if( i % j == 0 ){

                continue;

            } else {

                check = 0;
                break;

            }

        }

        if( check == 1 ){

            cout << i << endl;
            break;

        }

    }

}

2 个答案:

答案 0 :(得分:2)

你的问题是range( 6, 10 )表示从6开始的所有数字,包括但不包括10.所以只有数字6,7,8,9。

range( 2, 10 )有效,因为它包含5个,连同其他包含的数字,如6或8,要求它由2设计,所以你实际得到(隐式)检查是否可以通过其中包括10,即使10不是range(2, 10)的一部分。

你可以写range(5, 10)range(6, 11),它应该有效。

答案 1 :(得分:1)

您缺少5

range9(1,10) == [1, 2, 3, 4, 5, 6, 7, 8, 9]
range9(6,10) == [6, 7, 8, 9]