Problem z modulo z dużych liczb (mniejszych od 1e18)

0

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?

1

A gdzie ten program?

1 użytkowników online, w tym zalogowanych: 0, gości: 1