From 6fd6b4eaedb3b19ae8d913ba078c9d69f48227dd Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Wed, 2 Feb 2022 17:40:31 +0000 Subject: - Added solutions by Ulrich Rieke. --- challenge-150/ulrich-rieke/cpp/ch-2.cpp | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 challenge-150/ulrich-rieke/cpp/ch-2.cpp (limited to 'challenge-150/ulrich-rieke/cpp/ch-2.cpp') diff --git a/challenge-150/ulrich-rieke/cpp/ch-2.cpp b/challenge-150/ulrich-rieke/cpp/ch-2.cpp new file mode 100644 index 0000000000..db49e43808 --- /dev/null +++ b/challenge-150/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,76 @@ +#include +#include +#include +#include + +bool isPrime( int i ) { + if ( i == 1 ) + return false ; + else { + int stop = std::sqrt( static_cast( i ) ) ; + for ( int d = 2 ; d <= stop ; d++ ) + if ( i % d == 0 ) + return false ; + return true ; + } +} + +std::vector findDivisors( int n ) { + std::vector divisors ; + for ( int i = 1 ; i < n + 1 ; i++ ) { + if ( n % 1 == 0 ) + divisors.push_back( i ) ; + } + return divisors ; +} + +std::vector primeFactorialize( int n ) { + std::vector primeDecomposition ; + std::vector divisors = findDivisors( n ) ; + std::vector primeFactors ; + for ( int i : divisors ) { + if ( isPrime( i ) ) + primeFactors.push_back( i ) ; + } + int num = 0 ; + while ( n != 1 ) { + int nextFactor = primeFactors[ num ] ; + while ( n % nextFactor == 0 ) { + primeDecomposition.push_back( nextFactor ) ; + n /= nextFactor ; + } + if ( num + 1 < primeFactors.size( ) ) + num++ ; + } + return primeDecomposition ; +} + +bool isSquareFree( int n ) { + if ( n == 1 ) { + return true ; + } + else { + std::vector primeFactors = primeFactorialize( n ) ; + std::set numset( primeFactors.begin( ) , primeFactors.end( ) ) ; + return primeFactors.size( ) == numset.size( ) ; + } +} + +int main( ) { + std::vector squareFrees ; + int current = 1 ; + while ( current < 501 ) { + if ( isSquareFree( current ) ) + squareFrees.push_back( current ) ; + current++ ; + } + int count = 1 ; + for ( int i : squareFrees ) { + std::cout << i << " " ; + count++ ; + if ( count % 15 == 0 )//improves the output slightly + std::cout << std::endl ; + } + std::cout << std::endl ; + return 0 ; +} -- cgit