约数的分类"/>
上海计算机学会2023年3月月赛C++丙组T2约数的分类
约数的分类
内存限制: 256 Mb时间限制: 1000 ms
题目描述
古希腊数学家尼科马霍斯(Nicomachus)根据整数的真因数之和与该数的大小关系,将整数分为三类:
- 当这个整数的所有真因数之和大于其本身时,称该数为过剩数(Abundant)
- 当这个整数的所有真因数之和小于其本身时,称该数为不足数(Deficient)
- 当这个整数的所有真因数之和恰好等于其本身时,称该数为完美数(Perfect)
所谓 a 的真因数是 a 的因数且小于 a 的数。给定一个正整数 n,请判断它是过剩数,不足数还是完美数。
输入格式
单个整数:表示给定的数字。
输出格式
根据输入整数的分类,输出 Abundant
、Deficient
或 Perfect
。
数据范围
- 对于 50% 的分数,1≤n≤1,000,000
- 对于 100% 的分数,1≤n≤2,000,000,000
样例数据
输入:
6
输出:
Perfect
说明:
6=1+2+3
输入:
7
输出:
Deficient
说明:
7是素数只有一个真因子1
输入:
12
输出:
Abundant
说明:
1+2+3+4+6>12
解析:
遍历求出所有因子,求和,比较大小。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{long long n;long long sum=1;cin>>n;for (int i=2;i*i<=n;i++){if (n%i==0){int t=n/i;sum+=t+i;if (i==t)sum-=i;}}if (sum>n)cout<<"Abundant";else if(sum==n)cout<<"Perfect";elsecout<<"Deficient";return 0;
}
更多推荐
上海计算机学会2023年3月月赛C++丙组T2约数的分类
发布评论