PAT乙级(1096 大美数)C语言详解

张裕  金牌会员 | 2025-3-12 14:50:36 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 697|帖子 697|积分 2091

1096 大美数

   若正整数 N 可以整除它的 4 个差异正因数之和,则称如许的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
  输入格式


输特别式

   对每个需要检测的数字,如果它是大美数就在一行中输出 Yes,否则输出 No。
  输入样例

  1. 3
  2. 18 29 40
复制代码
输出样例

  1. Yes
  2. No
  3. Yes
复制代码
代码示例

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <stdbool.h>
  6. // 定义一个数组 val 用于存储一个数的所有因子,最大可存储 10000 个因子
  7. // 定义一个变量 cnt 用于记录因子的数量
  8. int val[10000], cnt;
  9. // 定义一个函数 chack,用于检查一个数 n 是否满足特定条件
  10. // 条件为:该数的因子数量不少于 4 个,且存在四个不同的因子,它们的和能被该数整除
  11. int chack(int n) {
  12.     // 每次检查新的数时,将因子数量计数器 cnt 重置为 0
  13.     cnt = 0;
  14.     // 遍历从 1 到 n 的所有数,找出 n 的所有因子
  15.     for (int i = 1; i <= n; i++) {
  16.         // 如果 i 是 n 的因子
  17.         if (n % i == 0) {
  18.             // 将该因子存储到 val 数组中
  19.             val[cnt++] = i;
  20.         }
  21.     }
  22.     // 如果因子数量少于 4 个,不满足条件,直接返回 0
  23.     if (cnt < 4)
  24.         return 0;
  25.     // 使用四重循环遍历所有可能的四个不同因子的组合
  26.     for (int i = 0; i < cnt; i++) {
  27.         for (int j = i + 1; j < cnt; j++) {
  28.             for (int k = j + 1; k < cnt; k++) {
  29.                 for (int l = k + 1; l < cnt; l++) {
  30.                     // 计算这四个因子的和
  31.                     // 检查这四个因子的和是否能被 n 整除
  32.                     // 如果不能整除,使用 continue 跳过本次循环,继续尝试下一组组合
  33.                     if ((val[i] + val[j] + val[k] + val[l]) % n) continue;
  34.                     // 如果能整除,说明找到了满足条件的四个因子,返回 1
  35.                     return 1;
  36.                 }
  37.             }
  38.         }
  39.     }
  40.     // 如果遍历完所有组合都没有找到满足条件的四个因子,返回 0
  41.     return 0;
  42. }
  43. int main() {
  44.     // 定义一个整数 k,用于存储要检查的数的数量
  45.     int k;
  46.     // 从标准输入读取一个整数,并将其存储到变量 k 中
  47.     scanf("%d", &k);
  48.     // 循环 k 次,依次处理 k 个数
  49.     for (int i = 0; i < k; i++) {
  50.         // 定义一个整数 a,用于存储每次要检查的数
  51.         int a;
  52.         // 从标准输入读取一个整数,并将其存储到变量 a 中
  53.         scanf("%d", &a);
  54.         // 调用 chack 函数检查数 a 是否满足条件
  55.         if (chack(a) == 1) {
  56.             // 如果满足条件,输出 "Yes"
  57.             printf("Yes\n");
  58.         } else {
  59.             // 如果不满足条件,输出 "No"
  60.             printf("No\n");
  61.         }
  62.     }
  63.     // 程序正常结束,返回 0
  64.     return 0;
  65. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表