совет, как сделать мой алгоритм быстрее

Вот мой код на C для задачи № 3 из проекта Эйлера, где я должен найти самый большой простой множитель из 600851475143.

#include <stdio.h>
#include <stdlib.h>

bool is_prime(long int number){
     long int j;
     for (j=2; j<=number/2; j++){
             if (number%j==0) return false;
             if (j==number/2) return true;
            }
    }

int main(){

     long int input;
     scanf("%d", &input);
     long int factor;
     int ans=0;

     for (factor=input/2; factor>1; factor--){
             if (input%factor==0 && is_prime(factor)) {
                     ans = factor;
                     break;
                    }
            }

     printf("%d\n", ans);
     system("pause");
     return 0;
    }

Хотя он отлично работает для небольших чисел, постепенно ему требуется все больше и больше времени, чтобы дать ответ. И, наконец, для 600851475143 код возвращает 0, что явно неверно. Может ли кто-нибудь помочь? большое спасибо.

Ответы на вопрос(3)

Ваш ответ на вопрос