Числа Армстронга(почти)

Рейтинг: 0Ответов: 1Опубликовано: 23.03.2023

Нужно решить задачку. Надо найти такие натуральные числа, не более 10000, в которых сумма цифр в некоторой степени равна самому числу. Пример такого числа: 81, 8+1=9, 9^2=81. Ограничение по степени "5", так как 10^5=10000. Я так понимаю изначально нужен цикл, который целочисленным делением разобьёт число, а дальше очевидные действия, но я в корне не понимаю как реализовать полноценный код на cpp.

Ответы

▲ 2

Простейший перебор

#include <iostream>

using namespace std;

int powi(int x, int e)
{
    int y = 1;
    while(e) {
        if (e&1) y *= x;
        x*=x;
        e >>= 1;
    }
    return y;
}

int main(int argc, char * argv[])
{
    for(int n = 1; n <= 10000; ++n)
    {
        int d = 0, m = n;
        while(m) { d += m%10; m /= 10; }
        int e = 1;
        if (d > 1) e = round(log(n)/log(d));
        if (powi(d,e) == n)
            cout << n << ": " << d << "^" << e << " = " << n << endl;
    }
}

Целочисленное возведение в степень на всякий случай, вдруг отношение логарифмов с плавающей точкой не даст целое там, где должно...

https://ideone.com/i7XMLU

P.S. Кстати, пятая степень появляется только для числа 17210368...

P.P.S. https://oeis.org/A023106