鱼C论坛

 找回密码
 立即注册
查看: 2616|回复: 7

题目119:考察可以写成各位数之和的幂的数字

[复制链接]
发表于 2016-8-21 02:40:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 欧拉计划 于 2016-8-22 22:37 编辑
Digit power sum

The number 512 is interesting because it is equal to the sum of its digits raised to some power: 5 + 1 + 2 = 8, and 83 = 512. Another example of a number with this property is 614656 = 284.

We shall define an to be the nth term of this sequence and insist that a number must contain at least two digits to have a sum.

You are given that a2 = 512 and a10 = 614656.

Find a30.


题目:

512 是有趣的,因为他正好等于他的各位数字之和的幂: 5 + 1 + 2 = 8,  83 = 512。另外一个有这个性质的数字是 614656=284

我们定义 an 为这个数列中的第 N 个元素,当然,起码得是两位数以上,才能求和。

已知 a2=512,a10=614656

请找出 A30
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-21 13:30:30 | 显示全部楼层
248155780267521,是对的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-21 20:44:54 | 显示全部楼层
逝痕 发表于 2016-8-21 13:30
248155780267521,是对的吗?

我也是这结果248155780267521
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-21 20:46:03 | 显示全部楼层
代码如下
result = []

for i in range(2,100):
    for j in range(2,100):
        number = i**j
        number = str(number)
        length = len(number)
        s = 0
        num = []
        for k in range(length):
            num.append(int(number[k]))
            s += num[k]
        if s == i:
            result.append(i**j)

result.sort()
a = result[30-1]

print(a)
        
            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2016-8-22 13:16:16 | 显示全部楼层

python果然简洁明了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-22 13:19:12 | 显示全部楼层
逝痕 发表于 2016-8-21 13:30
248155780267521,是对的吗?
#include <iostream>
#include <climits>
#include <algorithm>
#include <vector>

bool interesting(unsigned long long x);        //判断数字是否符合要求

int main() {
        std::vector<unsigned long long> arr;
        for (int i = 2; i < 180; i++) {
                unsigned long long temp = i;
                while (temp < ULLONG_MAX / i) {
                        if (temp > 10){
                                arr.push_back(temp);
                        }
                        temp *= i;
                }
        }
        sort(arr.begin(), arr.end());
        std::vector<unsigned long long>::iterator pos = unique(arr.begin(), arr.end());
        arr.erase(pos, arr.end());                //除去重复的数字
        int k = 1;
        for (std::vector<unsigned long long>::iterator itr = arr.begin(); itr != arr.end(); itr++){
                if (interesting(*itr)) {
                        std::cout << "a[" << k << "] = " << *itr << std::endl;
                        k++;
                }
                        
        }
        system("PAUSE");
        return 0;
}

bool interesting(unsigned long long x) {
        unsigned int sum = 0;
        unsigned long long temp = x;
        while (temp != 0){
                sum += temp % 10;
                temp /= 10;
        }
        if (sum == 1) {
                return false;
        }
        while (x != 1) {
                if (x % sum != 0){
                        return false;
                }
                x /= sum;
        }
        return true;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-15 08:29:22 From FishC Mobile | 显示全部楼层
对于不支持大数运算的语言那简直就是灾难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 16:52:54 | 显示全部楼层

结果是对的。但缺少数学上的证明这样做已经可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 20:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表