наибольшее факториальное число представлено как множитель в некотором целом числе n - PullRequest
1 голос
/ 04 июля 2011

Я работаю над созданием алгоритма, чтобы найти наибольшее факториальное число, представленное как множитель в некотором целом числе n. Эта проблема дана в «Как решить ее с помощью компьютера» Р.Г.Дормея. Не могли бы вы помочь мне с разработкой алгоритма? Ответ должен быть множителем n, а также факториальным числом.

решение, о котором я подумал:

сначала подтвердите, что целое число не простое. если простое число, дальнейшее решение невозможно ..

если не простое число, найдите наибольшее значение целого числа

проверьте, является ли это факториальным числом или нет ..

если да, то это ответ

Если нет, найдите второй по величине коэффициент целого числа.

проверить, является ли это факториальным числом или нет ...

и т. Д.

Ответы [ 5 ]

4 голосов
/ 04 июля 2011

Разделите N на 1, затем результат на 2, затем результат на 3, ... затем на k + 1. Если для k + 1 нет целочисленного результата, k! это ответ.

2 голосов
/ 04 июля 2011

Вы ищете самый большой факториал, который входит в ваше целое число, так что вам просто нужно постоянно увеличивать свои факторы.Т.е. проверьте, делится ли полученное целое число на 2, 3, 4 и т. Д. ... Когда вы впервые получаете ошибку, вы знаете, что никакое большее факториал не разделит ваше целое число.Например, если ваше целое число делится на 2 ... 6, но не на 7, вы знаете, что ответ - 6!.

0 голосов
/ 07 мая 2014
#include<stdio.h>
main()
{
      int i,n;
      scanf("%d",&n);
      for(i=2;n>1&&n%i==0;i++)
      n/=i;
      printf("%d",i-1);
}

n - номер ввода

0 голосов
/ 14 апреля 2014
long prod = 1;
long maxFactor = 1;

for(long i=2; i<=n && prod< n && n%i==0 ;i++){

    prod  = prod*i;
    if(n%prod == 0) maxFactor = prod;
}

Здесь n - это число, чей наибольший факторный фактор нам нужно выяснить, а окончательное значение macFactor является окончательным решением.

Примечание: Факторы фактора числа также являются факторами числа.

Если фактор является факториальной величиной, то он должен быть произведением последовательных целых чисел, начиная с 1 (другими словами, он должен быть произведением его факторов, отличных от него самого)

0 голосов
/ 04 июля 2011

учитывая свойство факториалов расти очень-очень-очень-очень быстро ... я бы попытался разделить его напрямую. сначала найдите самый большой факториал меньше вашего числа ... затем начните проверку, разделив Например: пусть N будет вашим номером. Пусть factorial f (fac, num) будет вашей факториальной функцией, которая возвращает факториал меньше вашего числа. такой, что ням! = fac Затем сделайте следующее:

Проверьте, если (N% fac) == 0; иначе попробуй (N * num)% fac затем (N * (num) * (num-1))% fac

ответ, который вам требуется - (num) в первом случае (num-1) во втором случае и т. Д.

...