3-я задача проекта Эйлера - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здрям! Задача: "Каков самый большой делитель числа 600851475143, являющийся простым числом?" Мое решение:
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int result;
    unsigned long delimoe;
    int delitel;
    
    delimoe = 600851475143;
    //delimoe = 13195;
    delitel = 3;
        
    for (delitel;delitel <= delimoe+1;delitel++)
    {
        if (
        (
        delimoe%delitel==0)
        &&(!(delitel%2==0))
        &&(!(delitel%3==0))
        &&(!(delitel%5==0))
        )
        {
        result = delimoe%delitel;
        
        printf("%d\t%d\n", delitel, result);
        }
             
    }   
    system("PAUSE");
    return 0;
}
Результат работы программы и проверка в экселе: 7

___

85 835 925 020,43 17

___

35 344 204 420,18 47

___

12 784 073 939,21 119

___

5 049 172 060,03 329

___

1 826 296 277,03 799

___

752 004 349,37 5 593

___

107 429 192,77 688 543

___

872 641,90 4 819 801

___

124 663,13 11 705 231

___

51 331,88 32 361 521

___

18 566,85 81 936 617

___

7 333,13 226 530 647

___

2 652,41 550 145 857

___

1 092,17 Правильный ответ методом подбора в экселе: 71

___

8 462 696 833,00 Вопрос: чё не так?

Решение задачи: «3-я задача проекта Эйлера»

textual
Листинг программы
long long maxprime(long long l, long long m)
{
     long long d;
     if (l<3) return l;
     if (l%2==0)
         return maxprime(l/2, 2);
     for (d=m ; d*d<=l; d+=2 )
         if (l%d==0)
            return maxprime(l/d, d);
     return l;
}
int main()
{
    printf("%d\n",maxprime(600851475143,3));
    return 0;
}

Объяснение кода листинга программы

В данном коде реализована функция maxprime, которая находит наибольший простой делитель числа l при условии, что m — это делитель l. Если число l меньше 3, то функция возвращает его как простое. В противном случае, если число l делится на 2, то функция рекурсивно вызывает саму себя для чисел l/2 и 2. Затем функция проверяет все четные числа в диапазоне от m до квадратного корня из l, и если число l делится на какое-либо из этих чисел без остатка, то функция рекурсивно вызывает саму себя для чисел l/d и d. Если такое число не найдено, то функция возвращает l. В функции main вызывается функция maxprime с аргументами 600851475143 и 3, и результат выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5