【欧拉计划】030 各位数字的五次幂

题目:

在这里插入图片描述

难点:

在枚举的过程中,到底该枚举多大的范围。
如何确定枚举上限:

f(n) = 10^n;
g(n) = 9^5 * n

一个n位数字的最大值是10^n -1 // '-1’影响不大
一个n位数字每位最大为9,题目中是一个5位数,一共为n位,所以9^5 * n

这里是函数 ( f(n) = 10^n ) 和 ( g(n) = 9^5 \cdot n ) 在 ( n ) 从 0 到 6 范围内,并且 ( y ) 轴范围设为 0 到 1,000,000 的图像:

可以发现,f,g函数单调递增 n = 5.xxx处为两函数交点,所以n = 6,g(6)为这道题的上限。

#include <stdio.h>
#include <math.h>

int main() {
    printf("%d", (int)pow(9, 5) * 6);
    return 0;
}

枚举的上界为354294。

解题答案:

#include <stdio.h>
#include <math.h>
#define MAX_N 354294

int is_val(int n) {
    int x = n, temp = 0;
    while(x) {
        temp += (int)pow(x % 10, 5);
        x /= 10;
    }
    return temp == n;
}

int main() {
    int sum = 0;
    for (int i = 2; i <= MAX_N; i++) {
        if (!is_val(i)) continue;
        sum += i;
    }
    printf("%d\n", sum);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值