算数基本定理
题一:完美数;
思路:
1.定义一个sum用来记录整数n的除自身外的因子的和;
2.为减少遍历时间,遍历到的位置到根号n处即可,那么sum=sum+i + num / i;
bool func(int n)
{
int sum = 0;
int temp = sqrt(num);
//边界条件:考虑到如果根号n恰为整数,
if (temp * temp == num) sum += temp;
//如果i<temp 可以试试6 这个完美数;
for (int i = 1; i <= temp;i++)
{
if (num % i == 0)
{
if (i == 1)
sum += i;
//排除边界条件带来的影响;
else if(i!=num/i)
sum += i + num / i;
}
}
if (sum == num)
return true;
else return false;
}
题二:丑数;
思路:(可以使用上次素数判定丑数中被淘汰的算法,稍作修改)
1.数据是否为丑数,进行因子判定;
首先先排除不能除2 3 5的数;
对一个数循除5,余数不为0时,再除3,余数不为0时,除2,如果余数不为0,那么就不是丑数;
#include<iostream>
using namespace std;
bool isUgly(int n) {
bool ret=false;
if(n==0) return false;
if (n == 1) return true;
if (n % 2 == 0 || n % 3 == 0 || n % 5 == 0)
{
int temp = n;
if (temp % 5 == 0)
{
while (temp % 5 == 0)
{
temp = temp / 5;
}
}
if (temp % 3 == 0)
{
while (temp % 3 == 0)
{
temp = temp / 3;
}
}
if (temp % 2 == 0)
{
while (temp % 2 == 0)
{
temp = temp / 2;
}
}
if (temp == 1)
{
ret=true;
return true;
}
}
return ret;
}