我一直试图在Project Euler上解决第5个问题,就像
一样2520是可以除以1到10之间的每个数字的最小数字,没有任何余数。
从1到20的所有数字均可被整除的最小正数是多少?
我决定更进一步,我决定让它找到可以被1到限制的所有数字整除的最小正数,其中限制是用户定义的。
问题在我执行程序时开始,它立即打印出来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;
}
答案 0 :(得分:3)
答案应该只是所有数字的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;
}