#include <iostream>
#include <cmath>
using namespace std;
unsigned long long modExp(unsigned long long b, unsigned long long e, unsigned long long m)
{
unsigned long long remainder;
unsigned long long x = 1;
while (e != 0)
{
remainder = e % 2;
e= e/2;
// These lines
if(remainder==1)
x=(unsigned long long)fmodl(((long double)x*(long double)b),(long double)m);
b=(unsigned long long)fmodl(((long double)b*(long double)b),(long double)m);
}
return x;
}
int main()
{
unsigned long long lastTen = 0,netSum=0;
unsigned long long sec(unsigned long long,unsigned long long);
for(int i=1;i<1001;i++)
{
lastTen = modExp(i,i,10000000000);
netSum += lastTen;
netSum %= 10000000000;
cout << lastTen << endl ;
}
cout << netSum%10000000000 << endl;
cout << sizeof(long double) << endl;
return 0;
}
Это моя программа для вычисления последних десяти цифр суммы серии. Он использует метод арифметической экспоненции для вычисления последних 10 цифр. Он хорошо работает для 10^9. Но когда я иду на 10^10, он рушится.fmodl - Модуль в длинном двойном
Поэтому, чтобы использовать типы данных более высокого размера, я преобразовал число, которое нужно умножить на длинный двойной и умножить на них (что снова даст длинный двойной), поэтому, если мы возьмем модуль на этом номере, мы получим правильный ответ , Но я не получил правильного ответа снова, он вызывает тот же неправильный ответ.
Моя мысль сделать такую вещь, как этот
- неподписанный долго долго 8 байт, так как я Moding я хотел бы получить большое число как 10 цифр, так умножая 2, десять цифр номера будет не подходит в unsigned long long, поэтому он будет циклически работать в unsigned long long
- поэтому для вышеуказанной точки я конвертирую беззнаковый длинный длинный в длинный двойной (это 12 байт), и поскольку он имеет большое пространство, он достаточно большой, чтобы соответствовать 20-разрядное произведение из 2 десятизначных чисел
Может ли кто-нибудь сказать, что является недостатком в этой логике?
Возможно, вы правильно отделили функцию 'modExp' (как' main')? Кроме того, что такое объявление 'sec' в' main'? –
Я редактировал код. –