#include #include #include #include using namespace std; #define K 4 #define MAX 100000 int sieve[MAX]; bool seen[MAX]; int unseen = 1; int factorize(int n, map &fact) { int mx = 0; while (n>1) { int prime = sieve[n]; int pow = 0; do { n /= prime; pow++; } while (n % prime==0); fact[prime] = pow; if (mx < pow) { mx = pow; } } return mx; } int other(int prev) { map prevfact; int mx = factorize(prev, prevfact); for (int can=unseen; can1) { int prime = sieve[rem]; int pow = 0; if (prevfact.count(prime)) { pow = prevfact[prime]; } do { rem /= prime; pow++; } while (rem % prime==0); if (remx < pow) { remx = pow; } } if (remx>=K) { return can; } } } fprintf(stderr, "*** the end\n"); exit(0); } int main() { memset(sieve, 0, sizeof(sieve)); memset(seen, 0, sizeof(seen)); int pc = 0; for (int n=2; n