void factorize(LL n, vector<LL> &divisor) { if (n == 1) return; if (prime_test(n)) divisor.push_back(n); else { LL d = n; while (d >= n) d = pollard_rho(n, rand() % (n - 1) + 1); factorize(n / d, divisor); factorize(d, divisor); } }
paillier_priv paillier_keygen (size_t nbits, size_t abits, u_int iter) { // Fast decryption assert (nbits > 0); assert (abits > 0); assert (abits <= nbits); random_init (); size_t sbits = nbits - (2 * abits); bigint n, p, q, a, g, k; do { a = random_prime (abits, odd_sieve, 2, iter); bigint cp = random_bigint (sbits/2 + (sbits & 1)); bigint cq = random_bigint (sbits/2 + 1); p = a * cp + 1; while (!prime_test (p)) // p1 = a * (++c1) + 1 p += a; q = a * cq + 1; while (!prime_test (q)) // p2 = a * (++c2) + 1 q += a; n = p * q; } while (n.nbits () != nbits && n.nbits () != (nbits+1) || p == q); paillier_gen (p, q, n, a, g, k); if (p > q) swap (p, q); return paillier_priv (p, q, a, g, k, &n); }
int main(){ int limit = 20; int multiple = 1; for (int i = 2; i < limit; i++){ if (prime_test(i) == true){ int j = 1; int temp = (int) pow(i, j); while (temp < limit){ temp = pow(i, ++j); } multiple = multiple * (int) pow(i, j - 1); } } printf("%d \n", multiple); }
int main(int argc, char *argv[]){ char input[300]; int sum; int i; for(i=3; i<1040; i++){ if(prime_test(i) == 1){ prime[prime_count++] = i; } } while(gets(input) != NULL){ sum = 0; for(i=0; input[i] != '\0'; i++){ if(input[i] > 96){ sum += (input[i] - 96); } else{ sum += (input[i] - 38); } } for(i=0; i<prime_count; i++){ if(sum % prime[i] == 0 && sum != prime[i]){ printf("It is not a prime word.\n"); break; } if(i == prime_count - 1 || sum == prime[i]){ printf("It is a prime word.\n"); break; } } } return 0; }