Найти остаток от деления - 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;
}
Объяснение кода листинга программы
- Вводится число N.
- В зависимости от значения N вычисляется выражение (2^(2^1)) % 7, (2^(2^1) + (2^(2^2)) % 7), (2^(2^1) + (2^(2^2) + (2^(2^3)) % 7)).
- Выводится результат вычисления.
- Выводится остаток от деления (3*N+N%2)%7.