NBUT 1643 階乘除法

2021-07-17 02:57:13 字數 1475 閱讀 7919

階乘除法crawling in process...crawling failedtime limit:5000msmemory limit:65535kb64bit io format:

submit

status

practice

nbut 1643

description

input

output

sample input

sample output

hint

description

輸入兩個正整數 n, m,輸出 n!/m!,其中階乘定義為 n!= 1*2*3*...*n (n>=1)。 比如,若 n=6, m=3,則 n!/m!=6!/3!=720/6=120。

是不是很簡單?現在讓我們把問題反過來:輸入 k=n!/m!,找到這樣的整數二元組(n,m) (n>m>=1)。

如果答案不唯一,n 應該盡量小。比如,若 k=120,輸出應該是 n=5, m=1,而不是 n=6, m=3,因為 5!/1!=6!/3!=120,而 5<6。

input

輸入包含不超過 100 組資料。每組資料報含乙個整數 k (1<=k<=10^9)。

output

對於每組資料,輸出兩個正整數 n 和 m。無解輸出"impossible",多解時應讓 n 盡量小。

sample input

120

1210

sample output

case 1: 5 1

case 2: impossible

case 3: 7 4

分析:顯然除了1之外,其他的數大師possible的,而卻k必然可以分解為(m+1)*(m+2)...(n-1)*n,這樣就好辦了,可以找出除了1之外的k的所有因子(包括其本身),然後從小到大看是否存在滿足(m+1)*(m+2)...(n-1)*n=k的m和n。

**:

#include#include#include#includeusing namespace std;

int y[1000000], cnt;

void f(int k)

y[cnt++] = k;

}int main()

int n, m;

f(k);

sort(y, y + cnt);

for (int i = 0; i < cnt; ++i)

else

break;

}if (t == 1)

break;

}printf("case %d: %d %d\n", ++cas, n - 1, m);

} return 0;

}

NBUT OJ 1643 階乘除法 打表

這道題一開始想錯了。想當然了。想著因為10!10 9,理所當然的認為答案的n也是在10以內,而且在計算的時候還數錯了一位。明明11!才大於10 9,因此要計算到10,最後還是在別人的提醒之下才明白打表的方法,因為11!大於10 9,所以兩個階乘做除法之後的剩下的元素個數一定會小於等於10,我們只需要...

階乘除法 CSU 1781

csu 1781 輸入兩個正整數 n,m,輸出 n m 其中階乘定義為 n 1 2 3 n n 1 比如,若 n 6,m 3,則n m 6 3 720 6 120。是不是很簡單?現在讓我們把問題反過來 輸入 k n m 找到這樣的整數二元組 n,m n m 1 如果答案不唯一,n 應該盡量小。比如,...

CSU 1781 階乘除法(列舉)

description 輸入兩個正整數 n,m,輸出 n m 其中階乘定義為 n 1 2 3 n n 1 比如,若 n 6,m 3,則 n m 6 3 720 6 120。是不是很簡單?現在讓我們把問題反過來 輸入 k n m 找到這樣的整數二元組 n,m n m 1 如果答案不唯一,n 應該盡量小...