Чем данная программа на Python отличается от программы на C++?

Есть две программы, на Pyhton и на C++. Не могу разобраться, почему они возвращают разный ответ, на Python 388 (верный ответ), а на C++ 375. При этом, если заменить j-i >= 5 на j-i >= 4 С++ начинает возвращать верный ответ.

На Python

f = open("27A.txt")
N = int(f.readline())
a = [int(x) for x in f]
k = 0

for i in range(N):
    for j in range(i+1, N):
        if (a[i]+a[j])%2 != 0 and (a[i]*a[j])%13 == 0 and j-i >= 5:
            k += 1
print(k)

На С++

#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

int main(){
    int n = 0;
    ifstream f("27A.txt");
    f >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++) f >> a[i];
    int k = 0;
    
    for (int i = 0; i < n; i++){
        for (int j = i+1; j < n; j++){
            if ((a[i]+a[j])%2 != 0 && (a[i]*a[j])%13 == 0 && j-i >= 5){
                k++;
            }
        }
    }
    
    cout << k << endl;
    return 0;
}

Ссылка на файл https://kompege.ru/files/e6zJggVnP.txt


Ответы (1 шт):

Автор решения: Harry

При замене на >= 4 правильный ответ — чисто случайно.

Замените int на long long int.

Смотрите, например, возьмем реально наличествующие в списке 71243 и 64210. Их произведение равно 4574513030, что никак в int не влезает. Усечение, неверный результат...

В Python такого ограничения на целочисленные вычисления нет.

P.S. А можно оставить int и чуть оптимизировать:

for (int i = 0; i < n; i++)
    for (int j = i+5; j < n; j++)
        if ((a[i]+a[j])%2 && !((a[i]%13)*(a[j]%13))) k++;
→ Ссылка