[GESP202406五级] 小杨的幸运数字c++

题目背景

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正整数值域
140%40%≤100≤100≤105≤105
260%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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值