LeetCode 507:完美数
原题链接: LeetCode 507:完美数
分析
怎么求出一个数的因子,从1 到 sqrt(n)开始枚举,因为如果 因子大于sqrt(n)的话另一个因子就会小于sqrt(n)。避免重复计算
每次遍历时将两个因子累加起来。
代码
bool checkPerfectNumber(int num)
{
if (num == 1)
return false;
int sum = 0;
for (int i = 1; i * i <= num; ++i)
{
if (num % i == 0)
{
sum += i;
if (i * i != num)
sum += num / i;
}
}
sum -= num;
return sum == num;
}
偷鸡法
看到评论区有的哥们欺负完美数少,直接用的打表计算
bool checkPerfectNumber(int num)
{
switch(num)
{
case 6:
case 28:
case 496:
case 8128:
case 33550336:
return true;
}
return false;
}
其实结果都差不多的
LeetCode 263:丑数|
链接: 263.丑数1
分析
用比较老实的方法,因为丑数因子都是2,3,5;
那我只要拿给出的数一直除以2,3,5,到最后如果结果为1,就说明是丑数。
代码
bool isUgly(int n)
{
if (n < 1)
return false;
while (n % 2 == 0)
{
n /= 2;
}
while (n % 3 == 0)
{
n /= 3;
}
while (n % 5 == 0)
{
n /= 5;
}
return n == 1;
}
运行结果:
感谢大家观看
今天的文章《算法零基础》第9讲:算术基本定理分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9718.html