Files
test/puzzles/project_euler/p005_SmallestMultiple.cpp

57 lines
935 B
C++

/* Check cf5-opt.vim defs.
VIM: let g:lcppflags="-std=c++11 -O2 -pthread"
VIM: let g:wcppflags="/O2 /EHsc /DWIN32"
*/
#include <iostream>
#include <exception>
/*
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?
Solution:
232792560
*/
long long lacking_factor( long long n, long long m )
{
long long h = (long long)sqrt(double(n));
long long l = 1;
for ( long long i = 2; i <= h; )
if ( n%i )
++i;
else
{
n/=i;
h = (long long)sqrt(double(n));
if ( m%i )
l*=i;
else
m/=i;
}
if ( m%n )
l *= n;
return l;
}
int main ( void )
{
long long m = 1;
for ( int i = 2; i <= 20; ++i )
{
m *= lacking_factor( i, m );
//std::cout << i << " " << m << std::endl;
}
std::cout << m << std::endl;
return 0;
}