#include #include int prime(long long int value) { unsigned int divisor = 3; unsigned int square = divisor * divisor; if (value == 0) return 0; if (value == 2) return 1; if (value == 3) return 1; if (!(value & 1)) return 0; /* even */ while (square < value && value % divisor) { ++divisor; square += 4 * divisor; ++divisor; } return value % divisor != 0; } int main() { long long int i,j,res,count; count = 0; //0-75: 13209125 //75-80: 847706 //80-100: 3370427 //can split these in half to run on multi-processor machines long long int min = 0; long long int max = 100000000; //long long int max = 30; for (i = min; i < max; i++) { for (j = 2; j <= sqrt(i); j++) { if (i % j == 0) { if (prime(j)) { res = i / j; if (res == j || prime(res)) { //printf("New: %llu\n",i); count++; break; } else { break; } } else { break; } } } if (i % 1000000 == 0) { printf("on %llu ",i); printf(": %llu\n",count); } } printf("Total: %llu\n",count); }