C++ 我如何找到可以被所有数字1:n除且没有余数的最小数?

C++ 我如何找到可以被所有数字1:n除且没有余数的最小数?,c++,algorithm,C++,Algorithm,我一直在努力解决Euler项目的第5个问题 2520是最小的数字,可以被1到10之间的每一个数字除,没有任何余数 能被1到20的所有数整除的最小正数是多少 我决定更进一步,我决定让它找到最小的正数,它可以被从1到limit的所有数字平均整除,其中limit是用户定义的 当我执行程序时,问题开始出现,它立即打印出0。我试图追踪我的代码,但没有成功 #include <iostream> using std::cout; using std::cin; bool isRemainder

我一直在努力解决Euler项目的第5个问题

2520是最小的数字,可以被1到10之间的每一个数字除,没有任何余数

能被1到20的所有数整除的最小正数是多少

我决定更进一步,我决定让它找到最小的正数,它可以被从1到limit的所有数字平均整除,其中limit是用户定义的

当我执行程序时,问题开始出现,它立即打印出0。我试图追踪我的代码,但没有成功

#include <iostream>
using std::cout;
using std::cin;

bool isRemainderFree(int num, int limit){
    bool bIsRemainderFree = true;
    if(num < limit){
        bIsRemainderFree = false;
    }else{
        for(int i=1; i <= limit; i++){
        if(num % i != 0){
            bIsRemainderFree = false;
            break;
        }
      }
    }
    return bIsRemainderFree;
}

int smallestMultiple(int limit){
    int smallestNum = 10;
    for(int i=1; i <= limit; i++){
        bool bFree = isRemainderFree(i, 10);
        if(bFree){
            cout << i << " is divisible by all numbers from 1 to " << limit << ".\n";
            smallestNum = i;
            return smallestNum;
            break;
        }
    }

}

int main(){
    int limit;
    cin >> limit;
    int smallestNum = smallestMultiple(limit);
    cout << smallestNum;
    return 0;
}
#包括
使用std::cout;
使用std::cin;
bool isRemainderFree(整数,整数限制){
bool-bisremanderfree=true;
如果(数量<限制){
双剩余自由=假;
}否则{

对于(int i=1;i来说,答案应该是所有数字的LCM,可以通过以下方式轻松完成

int gcd(int a, int b){
    if(b==0)
        return a;
    return gcd(b, a%b);
}
int main() {
    int limit = 10, lcm = 1;
    for(int i=1; i<=limit; i++){
        lcm = (lcm * i)/gcd(lcm,i);
    }
    printf("%d\n", lcm); // prints 2520
    return 0;
}
intgcd(inta,intb){
如果(b==0)
返回a;
返回gcd(b,a%b);
}
int main(){
整数极限=10,lcm=1;

对于(int i=1;i来说,答案应该是所有数字的LCM,可以通过以下方式轻松完成

int gcd(int a, int b){
    if(b==0)
        return a;
    return gcd(b, a%b);
}
int main() {
    int limit = 10, lcm = 1;
    for(int i=1; i<=limit; i++){
        lcm = (lcm * i)/gcd(lcm,i);
    }
    printf("%d\n", lcm); // prints 2520
    return 0;
}
intgcd(inta,intb){
如果(b==0)
返回a;
返回gcd(b,a%b);
}
int main(){
整数极限=10,lcm=1;

对于(int i=1;i使用调试器逐行检查代码时,您观察到了什么?@user0042我认为它似乎是正确的,应该按预期运行,但我显然是错的。不过,我对最小的多重函数表示怀疑。我认为isRemainderFree函数可以。我认为您必须在中初始化
限制e> main()(对于ex,超过2520表示10)。你传递给
isRemainderFree
的10代表除数,因此你不会失去让
i
更高的范围。当使用调试器逐行检查代码时,你观察到了什么?@user0042我认为它似乎是对的,应该按预期运行,但我显然是错的。我对最小的MUL有疑问不过有一个函数。我认为isRemainderFree函数还可以。我认为您必须在
main()中初始化
limit
。就像测试的下限值一样,然后用20来解决问题。@arbuthnott我刚这么做,没有任何变化。
smallestMultiple
中的for循环只检查
limit
,即检查从1到10的任何值除以从1到10的每个数字是否没有余数。您需要增加该限制大小(例如,大于2520表示10)。传递到
isRemainderFree
中的10表示除数,因此您不会失去让
i
更高的范围。