题目背景
2024 年 6 月 GESP C++ 五级编程第 2 题
题目描述
小杨认为他的幸运数字应该恰好有两种不同的质因子,例如, 12=2×2×312=2×2×3 的质因子有 2,32,3 ,恰好为两种不同的质因子,因此 1212 是幸运数字,而 30=2×3×530=2×3×5 的质因子有 2,3,52,3,5 ,不符合要求,不为幸运数字。
小杨现在有 nn 个正整数,他想知道每个正整数是否是他的幸运数字。
输入格式
第一行包含一个正整数 nn,代表正整数个数。
之后 nn 行,每行一个正整数。
输出格式
输出 nn 行,对于每个正整数,如果是幸运数字,输出 11 ,否则输出 00 。
样例
输入样例
3
7
12
30
输出样例
0
1
0
样例解释
77 的质因子有 77 ,只有一种。
1212 的质因子有 2,32,3 ,恰好有两种。
3030 的质因子有 2,3,52,3,5 有三种。
数据范围
子任务编号 | 数据点占比 | nn | 正整数值域 |
---|---|---|---|
1 | 40%40% | ≤100≤100 | ≤105≤105 |
2 | 60%60% | ≤104≤104 | ≤106≤106 |
对于全部数据,保证有 1≤n≤1041≤n≤104 ,每个正整数 aiai 满足 2≤ai≤1062≤ai≤106 。
时间:1s
空间:512M
#include <bits/stdc++.h>
using namespace std;
bool check(int n) {
if (n < 2) return false;
int cnt = 0;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
cnt++;
if (cnt > 2) return false;
while (n % i == 0) {
n /= i;
}
if (cnt == 2 && n > 1) {
return false;
}
}
}
if (n > 1) cnt++;
return cnt == 2;
}
int main() {
int r;
cin >> r;
while (r--) {
int n;
cin >> n;
cout << (check(n) ? 1 : 0) << endl;
}
return 0;
}