Моя программа для вычисления наибольшего основного коэффициента 600851475143 застревает и никогда не останавливается во время компиляции и выполнения. Кто-нибудь знает, почему он не завершил выполнение?C-программа для поиска простых коэффициентов, компиляция не останавливается
#include <stdio.h> //Edited the #includes(typo) to #include
int main (void)
{
long long int num = 600851475143 ;
long long int factorCount;
long long int bigFactor;
for (long long int i=1 ; i <= num; i+=2)// Iterating through all numbers from 2, smaller than or equal to num
{
if (num % i == 0) // If the number "i" is a factor of num i.e. If "i" perfectly divides num
{
factorCount = 0;
//checking whether a factor "i" , is a prime factor of num
for (long long int j=2; j <= i ; j++ ) // Iterating through all numbers from 2, smaller than or equal to "i"
{
if (i % j == 0) // If the number "j" prefectly divides or is a factor of "i"
{
factorCount++; //Add 1 to factorCount
};
};
if (factorCount == 1) // If factorCount has not exceeded 1 i.e., the number "i" is a prime number
{
bigFactor = i;
};
};
};
printf("The largets prime factor of %lli is %lli\n",num,bigFactor);
return 0;
}
_never останавливается во время компиляции и execution_ - это две совершенно разные вещи. Если он никогда не останавливается во время компиляции, вы даже не достигаете исполнения. Что касается того, чтобы никогда не останавливаться во время исполнения ... вы просили много циклов. _Never_ - очень долгое время, и вы не дождались достаточно долго, чтобы определить, что он не остановится. По этой причине ваш метод определения того, является ли число простым, не является разумным. – mah
Он даже компилируется? #включает? –
Как вы знаете, 600851475143 является простым, поэтому эта программа будет работать в течение длительного времени. (Один из первых ярлыков, которые нужно предпринять при использовании факторинга перебора, - это попробовать кандидатские факторы только до квадратного корня от числа, которое вы факторизуете. Таким образом, вы можете уйти с «только» 387573 петлями вместо 300425737571.) –