(Good topic)四因数 (leetcode 181周赛T2)

 四因数难度中等1收藏分享切换为英文关注反馈给你一个整数数组 nums,请你返回该数组中恰有四个因数的这些整数的各因数之和。
如果数组中不存在满足题意的整数,则返回 0 。
 
示例:
输入:nums = [21,4,7]
输出:32
解释:
21 有 4 个因数:1, 3, 7, 21
4 有 3 个因数:1, 2, 4
7 有 2 个因数:1, 7
答案仅为 21 的所有因数的和。

 
提示:

 1 <= nums.length <= 10^4
 1 <= nums[i] <= 10^5
 
解题思路
上午的比赛,一开始做从1遍历到nums[i]一直超时,之后比赛结束后在讨论区有大神给了解答,从遍历到平方根即可改了之后可以通过了
1.先判断是否为平方数,是平方数则一定不是四因子数,因为如果是平方数则它必有一个单独的因子,所以不可能是四因子数。
2.然后遍历到平方根,详细看下面注释。
复制代码
 1 int sumFourDivisors(int* nums, int numsSize)
 2 {
 3     int sumfour = 0;
 4     int incflag = 0;
 5 
 6     for (int i = 0; i < numsSize; i++)
 7     {
 8         int flag = 0;
 9         int cnt = 1;
10         int sqrroot = sqrt(nums[i]);
11         int sum = 1 + nums[i];
12         for (int j = 2; j < sqrt(nums[i]); j++)
13         {
14             if (sqrroot * sqrroot == nums[i])  //如果是平方数直接跳出判断下一个数
15             {
16                 break;
17             }
18 
19             if (nums[i] % j == 0)
20             {
21                 cnt++;
22                 sum += (j + nums[i]/j);
23             }
24 
25             if (cnt > 2)
26             {
27                 break;
28             }
29         }
30         if (cnt != 2)
31         {
32             flag = 1;
33         }
34 
35         if (flag == 0)
36         {
37             incflag++;
38             sumfour += sum;
39         }
40     }
41 
42     if (incflag == 0)
43         return 0;
44     else
45         return sumfour;
46 }
复制代码

 

 
posted @   Xxaj5  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示