階乘除法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 應該盡量小...