Поставленная мне проблема заключалась в следующем:
"Каков наибольший простой делитель числа 600851475143?"
Программа используется, чтобы найти ответ именно так с помощью C:
#include<math.h> // for remainder because % does not work with double or floats
#include<stdio.h>
main()
{
double x=600851475143,y=3.0;
while(x!=y) // divide until only the number can divide itself
{
if(remainder((x/y),1)==0.0) // if x is divisible by y which means it is a factor then do the magic
{
x=x/y; // divide the number x by y thereby reducing one constituent factor
}
y=y+2; // add 2 simply because only odd numbers can be prime and hence only prime numbers can be prime factors
}
printf("%lf",y); // do the printing magic
}
Вопрос заключается в том, что я пытаюсь проверить и разделить x на все нечетные числа, но обратите внимание, что не все нечетные числа не являются простыми числами, этот недостаток в алгоритме должен привести к тому, что ответ будет неправильным, потому что на самом деле я должен быть проверка на простые множители (не на нечетные множители).
Удивительно, но ответ, который выдает эта программа, правильный, я проверил ответ.
Как мне это понять? Это не имеет смысла.
if (x % y == 0)
, чтобы проверить, делится ли x на y. И самое важное: отформатируйте код. - person   schedule 14.05.2013int_least64_t
, я стараюсь не беспокоиться о платформах, где они недоступны. Я хочу и ожидаю наличия 64-битных целых чисел.) - person   schedule 14.05.2013int
s не будет работать в этом случае на большинстве платформ, и OP может не знать об этом. - person Paul R   schedule 14.05.2013int
, именно. Да, тогда то, что вы говорите, разумно. (Жаль, что большинство новичков не знают / не используютlong long
и т. Д.) - person   schedule 14.05.2013int64_t
, чем переключаться на операции с плавающей запятой, что влечет за собой целый ряд других проблем. - person Paul R   schedule 14.05.2013x> y?
- person Koushik Shetty   schedule 14.05.2013