链接
传送门
题意
有一个数字\(x,(1 \leq x \leq 100)\),程序可以最多询问20次,每次输出一个数字,系统会给出他是否为x的因子,最后要求输出\(x\)是否为素数。
思路
检验给出的数字\(x\)的素因子个数,若有多个则为合数,如果只有一个,判断素因子的平方是否为\(x\)的因子,若为则为合数,不为则为素数。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <bits/stdc++.h>
using namespace std; const int maxn = 110; const int p2[] = {4, 9, 25, 49}; int p[maxn], num; bool np[maxn] = {1, 1};
void init() { for (int i = 2; i < maxn; ++i) { if (!np[i]) { p[num++] = i; for (int j = i * i; j < maxn; j += i) { np[j] = true; } } } }
bool check(int x) { cout << x << endl; string s; cin >> s; return s[0] == 'y'; }
int main() { init(); int cnt = 0, x; for (int i = 0; i < 16; ++i) { if (check(p[i])) { ++cnt; } } for (int i = 0; i < 4; ++i) { if (check(p2[i])) { cnt = 10; } } cout << ((cnt <= 1) ? "prime" : "composite") << endl; return 0; }
|