2011-07-04 61 views
1

我正在設計一種算法來查找作爲某個整數n中因子存在的最大因子數。 R.G.Dormey在「如何通過計算機解決它」中給出了這個問題。 你能幫助我如何去設計算法..答案是整數n的一個因素,也是一個階乘數..作爲一個整數n中的因子存在的最大因子數

解決方案,我認爲:

首先確認整數不主要。如果黃金,沒有進一步的解決方案更多鈔票..

如果不是素數,找出整數

檢查的最大因素,如果它是一個階乘數或不..

如果是,那就是回答

如果不是,找出第二大整數的因素..

檢查它是否是一個階乘數或不...

一nd等..

+0

您想要測試的最大可能整數是多少? –

+0

好點..我沒有想到..我想使用短整數的數字..所以它將是65535 – KawaiKx

+2

在這種情況下,您只需要一個高達8的階乘表! == 40320「,然後您可以測試這些中的任何一個是否完全劃分爲您的目標編號。即使使用32位無符號整數,你也只需要達到'12!'。 –

回答

2

你正在尋找進入你的整數的最大因子,所以你只需要穩步增加你的因素。即檢查生成的整數是否可以被2,3,4等整除......第一次出現故障時,您知道沒有更大的因子會分割整數。例如。如果你的整數可以被2 ... 6整除但不是7,你知道答案是6 !.

+0

-1:如果你的整數可以被2 ... 5而不是6整除,那麼你的數字就很奇怪了。它可以被2和3整除而不是6整除?似乎是被接受的答案,但這是錯誤的! –

+0

這只是一個例子。方法是絕對正確的。有效。這個答案與丹尼斯的答案相同。 – KawaiKx

+0

數字60可被2,3,4,5和6整除,但不是7.然而,6!不是答案。 –

4

將N除以1,然後將結果除以2,然後將結果除以3,...再除以k + 1。一旦k + 1沒有整數結果,k!是一個答案。

+0

+1:這個回答是正確的。雖然我會說k!是**答案。 –

0

因爲析因子的性質非常快速地增長非常大......我會試圖直接嘗試將其分開。 首先找到小於您的號碼的最大因子...然後開始檢查除以 例如:讓N爲您的號碼。讓階乘f(fac,num)爲您的階乘函數,其返回的乘數小於您的數字。這樣num! = fac 然後執行以下操作:

檢查是否(N%fac)== 0;其他嘗試(N * NUM)%FAC然後(N *(NUM)*(NUM-1))%FAC

ü需要答案是在第一種情況下在第二種情況等(NUM)(NUM-1)在

0
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
#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是輸入number