(Project Euler # 3) Попытка реплицировать решение в Python на C ++, идет ужасно неправильно, не знаю как

0

EDIT: Решено! Простая ошибка, случайно оставила значения int только в int, которые не могли удерживать эту цифру. Спасибо за помощь!

Я уже выполнил третью проблему Project Euler:

"Основными факторами 13195 являются 5, 7, 13 и 29. Каков самый большой первичный коэффициент числа 600851475143?"?

В Python с этим кодом (который работает):

def main():
    num = 600851475143 # You can replace this number with any number you want to find the largest prime to
    x = 2
    while x * x < num: 
        while num % x == 0:
            num = num / x #Divide number by generated number (X) to get the prime number.
        x = x + 1 # Continue in formula searching for largest prime
    print num #Prints largest prime of the assigned number (600851475143)
main()

и это сработало нормально. Однако, когда я попытался заменить этот код на C++ с помощью этого кода:

#include "stdafx.h"
#include <iostream>

int main()
{
    int num = 600851475143;
    int x = 2;
    while (x*x < num)
    {
        while (num % x == 0)
        {
            num /= x;
        }
        x = x++;
    }
    std::cout << num;

    char z;
    std::cin >> z;
    return 0;
}

Я всегда получаю вывод "-443946297" вместо правильного и очень другого выхода, которого я ожидал, "6857"

Может ли кто-нибудь объяснить, как я получаю такой сумасшедший ответ от по существу того же кода? Заранее спасибо!

Теги:

1 ответ

2
Лучший ответ

600851475143, вероятно, слишком велик, чтобы вписаться в int, что приводит к переполнению. Попробуйте изменить тип на long long. (Возможно, вы, вероятно, тоже измените x на long long, хотя в этом случае это может и не быть.)

  • 0
    Бахаха, я чувствую себя довольно глупо. Спасибо за помощь, вот и все! :)
  • 0
    Не могли бы вы принять ответ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню