Smallest multiple
Problem 5
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
Answer:
| 232792560 |
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int ans=1;
for(int i=1;i<=20;i++) ans*= (i/__gcd(ans,i));
cout<<ans<<endl;
return 0;
}
其实这道题可以手算....
Let N be the smallest number that is divisible by all the integers from 2 to k. For N to be
the smallest value with this property we must ensure that in its prime factorisation it
does not contain any more prime factors than is absolutely necessary.
Consider the first three cases of k:
k = 2, N = 2
k = 3, N = 2*3 = 6
k = 4, N = 2*3*2 = 12
We can see that for k = 4 we did not need to evaluate 2*3*4, because one of the 2’s in
the prime factorisation of 4 = 2*2 was already included. If we now consider the next
two cases:
k = 5, N = 2*2*3*5 = 60
k = 6, N = 2*2*3*5 = 60
We can see that N = 60 for both k = 5 and k = 6, because if N contains the factors 2
and 3 it already contains everything necessary for it to be divisible by 6.
Applying this principle for the case k = 20:
N = 2 * 3 * 2 * 5 * 7 * 2 * 3 * 11 * 13 * 2 * 17 * 19 = 232792560