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"
Может ли кто-нибудь объяснить, как я получаю такой сумасшедший ответ от по существу того же кода? Заранее спасибо!
600851475143, вероятно, слишком велик, чтобы вписаться в int
, что приводит к переполнению. Попробуйте изменить тип на long long
. (Возможно, вы, вероятно, тоже измените x
на long long
, хотя в этом случае это может и не быть.)