Witam,
Mam dość nietypowy problem na który sam nie potrafię znaleźć odpowiedzi a także nie potrafię jej znaleźć w sieci.
Mianowicie mam tablicę liczb (nazwijmy ją T) które mieszczą się w zakresie liczb long long
i następnie mam jakąś liczbę X która mieści się też w zakresie long long
i chce po kolei wypisywać X zmodulowane przez kolejny element T
Niby proste i rzeczywiście tak jest ale przy dużych liczbach program zwraca nieprawidłowe wartości modulo.
Weźmy sobie na nóż taką liczbę X
: 912345678912345678
Rozkład tej liczby na czynniki pierwsze to: 2 ⋅ 2 ⋅ 2 ⋅ 2 ⋅ 2 ⋅ 2 ⋅ 2 ⋅ 4211 ⋅ 13513 ⋅ 125260007
Więc jeśli tablica T = {2,125260007}
To wyjście powinno być takie: 0 0
No bo 2 i 125260007 dzieli X więc X mod 2 = 0
i X mod 125260007 = 0
Tyle że mój program nie zwraca zer ale: 2 125259957
Dla mniejszych liczb jest wszystko OK.
Treść programu:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
long long n, t;
cin >> n >> t;
vector<long long> elements(n);
for (long long i = 0; i < n; i++)
{
cin >> elements[i];
}
for (long long i = 0; i < n; i++)
{
long long el = elements[i];
long long mod = (long long)((long long)t % (long long)el);
cout << mod << "\n";
}
}
Nie mam pojęcia czemu tak się dzieje, nigdy nie doświadczyłem czegoś takiego.
Liczby się mieszczą w zakresie więc tym bardziej jestem zdezorientowany dlatego prosiłbym o pomoc.
Czyżby coś robię nie tak? Albo są jakieś dodatkowe limity?