Найти остаток от деления - C (СИ) (79344)

Узнай цену своей работы

Формулировка задачи:

Есть задача:
Написать программу, которая находит остаток от деления числа 2^(2^1) + 2^(2^2) + ... + 2^(2^(N-1)) + 2^(2^N) на 7. Напомним, что 2^N — это поизведение N множителей, каждый из которых равен 2 Входные данные Со стандартного потока ввода вводится натуральное число N < 100000 Выходные данные Вывести на экран одно число — остаток от деления. Примеры Ввод___Вывод 2______5 7______1
Вот мое решение:
#include <stdio.h>
 
long int twoPower(long int pow)
{
    return (2 << (pow - 1));
}
 
int main()
{
    long int n, i, result = 0;
    scanf("%d", &n);
    
    for (i = 1; i <= n; ++i)
        result += twoPower(twoPower(i));
 
    result %= 7;
    printf("%d", result);
    return 0;
}

Вопрос №1

: Почему результаты не совпадают?

Вопрос №2

: Существует ли какое-либо решение не "в лоб"?

Решение задачи: «Найти остаток от деления»

textual
Листинг программы
//////////////////////////////////////////////////////////////////////////////////
//Написать программу, которая находит остаток от деления 
//числа 2^(2^1) + 2^(2^2) + ... + 2^(2^(N-1)) + 2^(2^N) на 7.
//Напомним, что 2^N — это поизведение N множителей, каждый из которых равен 2.
//////////////////////////////////////////////////////////////////////////////////
 
#include <iostream> 
#include <limits> 
 
int main()
 
{
    for(;;)
    {
        std::cout << "n = ";
        long long n;        
        std::cin >> n;        
        if(n < 1
           || std::numeric_limits<long long>::max() < n)
        {
            break;
        }
        switch(n)
        {
        case 1:
            std::cout << "(2^(2^1)) % 7 == ";
            break;
        case 2:
            std::cout << "(2^(2^1) + (2^(2^2)) % 7 == ";
            break;
        case 3:
            std::cout << "(2^(2^1) + (2^(2^2) + (2^(2^3)) % 7 == ";
            break;
        default:
            std::cout << "(2^(2^1) + 2^(2^2) + ... + 2^(2^"
                      << n - 1
                      <<") + 2^(2^"
                      << n
                      <<")) % 7 == ";
        }
        std::cout << (3 * n + n % 2) % 7        
                  << std::endl                  
                  << std::endl;            
    }
    return 0;
}

Объяснение кода листинга программы

  1. Вводится число N.
  2. В зависимости от значения N вычисляется выражение (2^(2^1)) % 7, (2^(2^1) + (2^(2^2)) % 7), (2^(2^1) + (2^(2^2) + (2^(2^3)) % 7)).
  3. Выводится результат вычисления.
  4. Выводится остаток от деления (3*N+N%2)%7.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы