#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 ; }