Как найти сумму цифр числа в степени

Given a number, we need to find the sum of all the digits of a number which we get after raising the number to a specified power.
Examples: 
 

Input: number = 5, power = 4 
Output: 13
Explanation:
Raising 5 to the power 4 we get 625.
Now adding all the digits = 6 + 2 + 5


Input: number = 9, power = 5
Output: 27
Explanation:
Raising 9 to the power 5 we get 59049.
Now adding all the digits = 5 + 9 + 0 + 4 + 9

The approach for Python is explained. we have used pow() function to calculate the base to the power value. Then we have extracted every digit as string using str() method. Since we can’t calculate the sum of strings, we converted every string digit back to integer using int() method. Finally, we used sum() function to get the sum of all the digits. This solution will look very simple in Python but it won’t be so short in other languages. After running both the codes, one can compare the time elapsed and the memory used in both the given language i.e., Python and Java. 
Below is the implementation of above idea :
 

C++

#include<bits/stdc++.h>

using namespace std;

int calculate(int n, int power)

{

    int sum = 0;

    int bp = (int)pow(n, power);

    while (bp != 0) {

        int d = bp % 10;

        sum += d;

        bp /= 10;

    }

    return sum;

}

int main()

{

    int n = 5;

    int power = 4;

    cout << calculate(n, power);

}

Java

public class base_power {

    static int calculate(int n, int power)

    {

        int sum = 0;

        int bp = (int)Math.pow(n, power);

        while (bp != 0) {

            int d = bp % 10;

            sum += d;

            bp /= 10;

        }

        return sum;

    }

    public static void main(String[] args)

    {

        int n = 5;

        int power = 4;

        System.out.println(calculate(n, power));

    }

}

Python3

def calculate(n, power):

    return sum([int(i) for i in str(pow(n, power))])

n = 5

power = 4

print (calculate(n, power))

C#

using System;

public class base_power 

{

    static int calculate(int n, int power)

    {

        int sum = 0;

        int bp = (int)Math.Pow(n, power);

        while (bp != 0) 

        {

            int d = bp % 10;

            sum += d;

            bp /= 10;

        }

        return sum;

    }

    public static void Main()

    {

        int n = 5;

        int power = 4;

        Console.WriteLine(calculate(n, power));

    }

}

PHP

<?php

function calculate($n, $power)

{

    $sum = 0;

    $bp = (int)pow($n, $power);

    while ($bp != 0)

    {

        $d = $bp % 10;

        $sum += $d;

        $bp /= 10;

    }

    return $sum;

}

$n = 5;

$power = 4;

echo(calculate($n, $power));

?>

Javascript

<script>

   function calculate( n,  power)

{

     sum = 0;

     bp = Math.pow(n, power);

    while (bp != 0) {

         d = bp % 10;

        sum =sum+ d;

        bp = Math.floor(bp/ 10);

    }

    return sum;

}

     n = 5;

     power = 4;

    document.write(calculate(n, power));

</script>

Output: 

13

This article is contributed by Chinmoy Lenka. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

олимпиада – Как найти сумму цифр суммы цифр

Да,вот такой не понятный заголовок) Теперь к делу, дано число 2015 в 1999 степени, необходимо посчитать сумму цифр этого числа, у полученной суммы цифр посчитать сумму цифр и так до тех пор, пока не получится однозначное число, и нужно узнать что за однозначное число получается. Единственное что я смог, это написать программу, но она не будет действовать на такое большое число, как решить задачу с математической точки зрения

1 ответ

Hint. Если $%S(N)$% — это сумма цифр числа $%N$%, представленного в десятичной системе счисления, то $%S(N)=N mod 9$%. Например: $$S(2015^2)=S(4060225)= 19 = 1 = 2015^2 mod 9.$$

Здравствуйте

Математика – это совместно редактируемый форум вопросов и ответов для начинающих и опытных математиков, с особенным акцентом на компьютерные науки.

Присоединяйтесь!

отмечен:

олимпиада
×1,164

задан
4 Ноя ’15 12:50

показан
4267 раз

обновлен
4 Ноя ’15 13:36

Связанные вопросы

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

М-да, сложного-то, вроде, нет, но что-то такие тяжеловесные рассуждения получаются, что самого оторопь берёт.

Для любого $k$ последовательность {$(a_k)_n}={2^n pmod{10^k}}$ становится периодической по $n$, начиная с какого-то номера $n=n(k)$, с периодом $p(k)$ (ну это легко доказывается, по Дирихле она хоть один раз, да повторится, а дальше никуда не денется с подводной лодки). Значит, начиная с этого номера периодической будет и последовательность сумм $k$ последних цифр ${2^n}$ (возможно, с меньшим периодом).

Пусть максимальная сумма последних $k$ цифр в этом бесконечном периодическом хвосте

равна $M(k)$. Далее идём от противного. Если утверждение задачи неверно, то последовательность ${M(k)}$ тем более ограничена сверху числом $M(K)$ (которое достигается при некотором $k=K$). Поскольку, очевидно, $M(k)$ не убывает при росте $k$, то это значит, что $M(k)=M(K)$ для всех $k>K$.

В свою очередь, отсюда следует, что для тех номеров $n$, которые реализуют максимум суммы последних $k>K$ цифр в бесконечном периодическом хвосте

${(a_k)_n}$, десятичная запись $2^n$ содержит только нули в разрядах $K+1$, $K+2$, …, $k$. Однако отсюда с необходимостью следует, что период $p(k)=P(K)$ для всех $k>K$ (один раз повторившись через $p(K)$ членов, никуда последовательность уже не денется).

И вот тут в наши сети наконец попадается долгожданное противоречие. Ведь эти нули являются результатом переноса из нижних $K$ разрядов при последовательном сложении (надеюсь, все держат в памяти, что в последовательности ${2^n}$ каждый последующий член является суммой предыдущего с самим собой?). Взяв достаточно большое $k$, мы можем добиться, чтобы $p(K)$ членов было недостаточно, чтобы в результате переносов из этих разрядов во всех разрядах $K+1$, $K+2$, …, $k$ снова появились сплошные нули (для этого требуется по крайней мере один перенос из $k$-го разряда, а $k$ в наших руках, в то время как период $p(k)=p(K)$ фиксирован).

mysteria-m

3 / 3 / 5

Регистрация: 26.12.2013

Сообщений: 197

1

14.10.2015, 15:49. Показов 2533. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте, помогите пожалуйста с заданием.
Результат не правильный выдает((помогите разобраться((
Будем называть натуральное число n степенным, если существует целое положительное число k такое, что сумма цифр числа n в степени k равна n. Например, 4151 является степенным, так как 45+15+55+15=4151.
Ввод содержит одно целое число n (1 ≤ n < 1018).
Вывести сообщение Yes, если число является степенным, иначе вывести сообщение No.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <cmath>
 using namespace std;
int main() 
{ 
  int p=0,f, summa=0; 
  double n = 10; 
  long long  i, a, b, st; 
 
  cin>>i;
      a = b = i; 
     
for (f=1; f<10; f++)
{
 st = pow(n, f);
 while(b)
 {
          summa += pow((long long)(b / st), f);
          b %= st; 
          st /= 10;}
          cout<<f;
          if(summa == i)
          p=p+1;
          break;}
 
             if (p>0)
             cout <<"Yes";
             else
             cout <<"No";
                       
     
     }



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

14.10.2015, 15:49

6

7503 / 6378 / 2904

Регистрация: 14.04.2014

Сообщений: 27,745

14.10.2015, 15:54

2

Не следует использовать вещественные числа. Малейшая погрешность и у тебя не сойдётся результат.



0



3 / 3 / 5

Регистрация: 26.12.2013

Сообщений: 197

14.10.2015, 16:00

 [ТС]

3

спасибо за ответ, но результат все равно не правильный.. я так думаю проблема с циклом для степени (степень не задается изначально) может еще какой нибудь совет дадите?



0



zss

Модератор

Эксперт С++

13084 / 10361 / 6201

Регистрация: 18.12.2011

Сообщений: 27,704

14.10.2015, 16:10

4

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
using namespace std;
 
int main()
{
    int n;
    cout<<"n=";
    cin>>n;
    int t=n;
    int digits[20]; // цифры числа
    int digits_k[20]; // текущие степени цифр
    int count=0; // количество цифр
    while(t) // получение цифр и подсчет их количества
    {
        digits_k[count]=1; // нулевые степени цифр
        digits[count++]=t%10; // цифры
        t/=10;
    }
    for(int k=0;k<10;k++) // перебираем возможные степени
    {
        int sum=0;
        for(int j=0;j<count;j++)
        {
            sum+=digits_k[j]; // суммируем цифры в степени k
            digits_k[j]*=digits[j]; // пересчет цифр в степени k
        }
        if(sum==n) // проверка искомого условия
        {
            cout<<"power is "<<k<<endl;
            break;
        }
    }
    system("pause");
    return 0;
}



1



nmcf

7503 / 6378 / 2904

Регистрация: 14.04.2014

Сообщений: 27,745

14.10.2015, 16:18

5

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <vector>
using namespace std;
 
int main() {
    // your code goes here
    
    unsigned long long n, n1;
    vector<unsigned long long> a;
    
    cin >> n;
    n1 = n;
    
    while (n1 > 0LL)
    {
        a.push_back(n1 % 10LL);
        n1 /= 10LL;
    }
    
    for (unsigned long long i = 1LL; i <= 10LL; ++i)
    {
        unsigned long long r = 0LL;
        for (size_t j = 0; j < a.size(); ++j)
        {
            unsigned long long p = 1LL;
            for (unsigned long long k = 0LL; k < i; ++k) p *= a[j];
            r += p;
        }
        if (r == n)
        {
            cout << i << endl;
        }
    }
 
    return 0;
}

Для 4151 результат верный.



1



3 / 3 / 5

Регистрация: 26.12.2013

Сообщений: 197

14.10.2015, 16:22

 [ТС]

6

zss, nmcf, Огромное спасибо!



0



Kerry_Jr

Эксперт PHP

3105 / 2590 / 1219

Регистрация: 14.05.2014

Сообщений: 7,236

Записей в блоге: 1

14.10.2015, 16:29

7

mysteria-m, еще один вариантик

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cmath>
 
int main()
{
    typedef unsigned long long ull_t;
    ull_t n, temp;
    std::cin >> n;
    unsigned figure, power = 1, sum = 0;
    for(power; sum < n; ++power)
    {
        temp = n;
        sum = 0;
        while(temp > 0)
        {
            figure = temp % 10;
            sum += pow(figure, power);
            temp /= 10;
        }
    }
    
    if (sum == n)
        std::cout << "Yes" << std::endl;
    else
        std::cout << "No" << std::endl;
    
    return 0;
}



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

14.10.2015, 16:29

Помогаю со студенческими работами здесь

Найти все натуральные числа, сумма цифр каждого из которых в некоторой степени равна самому числу
4.Найдите все натуральные числа, не превосходящие 10000, сумма цифр каждого из которых в некоторой…

Определить, равна ли сумма двух первых цифр заданного числа четырехзначного числа сумме двух его последних цифр
Написать программу, позволяющую определить, равна ли сумма двух первых цифр заданного числа…

Определить равна ли сумма двух первых цифр четырехзначного числа сумме его последних цифр
Помогите пожалуйста написать программу в TASM
Определить равна ли сумма двух первых цифр…

Определить, равна ли сумма крайних цифр некоторого четырехзначного числа, сумме его средних цифр
Определить, равна ли сумма крайних цифр некоторого четырехзначного числа, сумме его средних цифр.

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

7

Nelle987 подала хорошую мысль – посчитать остаток от деления на 9.

Далее все знаки = будут обозначать “имеет такой же остаток от деления на 9”

2018^2017 = 2^2017 = 2*2^2016 = 2 * (2^6) ^336 = 2*64^336 = 2*1^336 = 2

Эта сумма сумм цифр равняется 2.

Добавим, что это число называется цифровой корень.

Может ли эта 4-ая сумма сумм оказаться двузначной, и только 5-ая однозначной?

Допустим, это так. Оценим количество цифр в числе 2018^2017.

Для этого найдем его десятичный логарифм.

lg (2018^2017) = 2017*lg (2018) ≈ 2017*3,305 = 6666,185

Значит, в этом числе всего лишь 6667 цифр. Если даже там все 9, сумма цифр

не более чем 9*6667 = 60003.

Возьмем чуть меньшее число, 59999. Его сумма цифр (вторая) равна

5 + 4*9 = 5 + 36 = 41.

Значит, вторая сумма цифр не более 41. Пусть будет 39.

Тогда третья сумма равна 12, а 4-ая равна 3, то есть однозначная.

Вывод: 4-ая сумма цифр числа 2018^2017 – однозначное число.

Ответ: цифровой корень числа 2018^2017 равен 2.

Добавить комментарий