Hero算数基本定理

算数基本定理

题一:完美数;

在这里插入图片描述

思路:

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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值