洛谷 P10720:[GESP202406 五级] 小杨的幸运数字 ← 整数唯一分解定理


【题目来源】
https://www.luogu.com.cn/problem/P10720
https://oj.czos.cn/p/3866

【题目描述】
小杨认为他的幸运数字应该恰好有两种不同的质因子,例如,12=2×2×3 的质因子有 2,3,恰好为两种不同的质因子,因此 12 是幸运数字,而 30=2×3×5 的质因子有 2,3,5,不符合要求,不为幸运数字。
小杨现在有 n 个正整数,他想知道每个正整数是否是他的幸运数字。

【输入格式】
第一行包含一个正整数 n,代表正整数个数。
之后 n 行,每行一个正整数。

【输出格式】
输出 n 行,对于每个正整数,如果是幸运数字,输出 1,否则输出 0。

【输入样例】
3
7
12
30

【输出样例】
0
1
0

【数据范围】
对于全部数据,保证有 1≤n≤10^4,每个正整数 ai 满足 2≤ai≤10^6。

【算法分析】
● 整数唯一分解定理(算术基本定理)
任何一个大于 1 的正整数 n,都可以唯一地表示成有限个质数的乘积形式:n=p₁ᵏ¹×p₂ᵏ²×...×pₘᵏᵐ,其中 p₁<p₂<...<pₘ 是质数,k₁,k₂,....,kₘ 是正整数.且这种分解方式在不考虑顺序的情况下是唯的。

● 整数唯一分解定理是欧拉函数计算公式的理论基础,欧拉函数是整数唯一分解定理的重要应用之一。通俗地讲,整数唯一分解定理是 “地基”,欧拉函数公式是 “盖在地基上的房子”;没有地基,房子建不起来;房子的存在,也印证了地基的稳固。
(1)欧拉函数 φ(n) 是数论中的重要函数,用于计算 1~n 中与 n 互质的正整数的个数。特别地,当 n=1 时,φ(1)=1
(2)欧拉函数的计算公式:若 n 的质因数分解为 n=p₁ᵏ¹×p₂ᵏ²×...×pₘᵏᵐ,则 φ(n)=n×(1-1/p₁)×(1-1/p₂)×...×(1-1/pₘ)。其中,p₁,…,pₘ,是 n 的所有质因数。

【算法代码】
“AcWing 4658:质因数个数”的代码(https://blog.csdn.net/hnjzsyjyj/article/details/158044746)简单修改便可。

#include <bits/stdc++.h>
using namespace std;

void cal(int n) {
    int cnt=0;
    for(int i=2; i*i<=n; i++) {
        if(n%i==0) {
            cnt++;
            while(n%i==0) n/=i;
        }
    }
    if(n>1) cnt++;
    if(cnt==2) cout<<1<<endl;
    else cout<<0<<endl;
}

int main() {
    int T,x;
    cin>>T;
    while(T--) {
        cin>>x;
        cal(x);
    }

    return 0;
}

/*
in:
3
7
12
30

out:
0
1
0
*/

 

 

【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/158044746
https://blog.csdn.net/hnjzsyjyj/article/details/158127227
https://blog.csdn.net/hnjzsyjyj/article/details/158097108
https://blog.csdn.net/hnjzsyjyj/article/details/158074254
https://www.cnblogs.com/Seren-blingbling/p/19413027
https://cloud.tencent.com/developer/article/2559731

posted @ 2026-02-19 12:17  Triwa  阅读(15)  评论(0)    收藏  举报