#include #include #include #include #define K 6 using namespace std; #define MAX 1000000 int sieve[MAX]; int omega[MAX]; bool seen[MAX]; int unseen = 1; void factorize(int n, map &fact) { fact.clear(); while (n>1) { int p = sieve[n]; fact[p] = true; n /= p; } } int other(int prev) { map prevfact; factorize(prev, prevfact); for (int can=unseen; can < MAX; can++) { if (!seen[can] && omega[prev]+omega[can]>=K) { int primes = prevfact.size(); int rem = can; while (rem>1) { int prime = sieve[rem]; if (!prevfact.count(prime)) { primes++; } do { rem /= prime; } while (rem % prime==0); } if (primes >= K) { return can; } } } fprintf(stderr, "*** the end\n"); exit(0); } int main() { memset(sieve, 0, sizeof(sieve)); memset(omega, 0, sizeof(omega)); int pc = 0; for (int n=2; n