1096 大美数
若正整数 N 可以整除它的 4 个差异正因数之和,则称如许的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式
输特别式
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes,否则输出 No。
输入样例
输出样例
代码示例
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdbool.h>
- // 定义一个数组 val 用于存储一个数的所有因子,最大可存储 10000 个因子
- // 定义一个变量 cnt 用于记录因子的数量
- int val[10000], cnt;
- // 定义一个函数 chack,用于检查一个数 n 是否满足特定条件
- // 条件为:该数的因子数量不少于 4 个,且存在四个不同的因子,它们的和能被该数整除
- int chack(int n) {
- // 每次检查新的数时,将因子数量计数器 cnt 重置为 0
- cnt = 0;
- // 遍历从 1 到 n 的所有数,找出 n 的所有因子
- for (int i = 1; i <= n; i++) {
- // 如果 i 是 n 的因子
- if (n % i == 0) {
- // 将该因子存储到 val 数组中
- val[cnt++] = i;
- }
- }
- // 如果因子数量少于 4 个,不满足条件,直接返回 0
- if (cnt < 4)
- return 0;
- // 使用四重循环遍历所有可能的四个不同因子的组合
- for (int i = 0; i < cnt; i++) {
- for (int j = i + 1; j < cnt; j++) {
- for (int k = j + 1; k < cnt; k++) {
- for (int l = k + 1; l < cnt; l++) {
- // 计算这四个因子的和
- // 检查这四个因子的和是否能被 n 整除
- // 如果不能整除,使用 continue 跳过本次循环,继续尝试下一组组合
- if ((val[i] + val[j] + val[k] + val[l]) % n) continue;
- // 如果能整除,说明找到了满足条件的四个因子,返回 1
- return 1;
- }
- }
- }
- }
- // 如果遍历完所有组合都没有找到满足条件的四个因子,返回 0
- return 0;
- }
- int main() {
- // 定义一个整数 k,用于存储要检查的数的数量
- int k;
- // 从标准输入读取一个整数,并将其存储到变量 k 中
- scanf("%d", &k);
- // 循环 k 次,依次处理 k 个数
- for (int i = 0; i < k; i++) {
- // 定义一个整数 a,用于存储每次要检查的数
- int a;
- // 从标准输入读取一个整数,并将其存储到变量 a 中
- scanf("%d", &a);
- // 调用 chack 函数检查数 a 是否满足条件
- if (chack(a) == 1) {
- // 如果满足条件,输出 "Yes"
- printf("Yes\n");
- } else {
- // 如果不满足条件,输出 "No"
- printf("No\n");
- }
- }
- // 程序正常结束,返回 0
- return 0;
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |