5791 NOIP2008模擬 階乘

2021-09-03 00:04:38 字數 3471 閱讀 4678

description

有n個正整數a[i],設它們乘積為p,你可以給p乘上乙個正整數q,使p*q剛好為正整數m的階乘,求m的最小值。

input

共兩行。

第一行乙個正整數n。

第二行n個正整數a[i]。

output

共一行

乙個正整數m。

solutions

可以把p分解質因數,假設p=∏ai^bi(ai為質數),那麼只要m!包含了每個ai^bi,m!就包含p。

所以對於每個ai^bi,分別求出滿足條件的最小的m,取最大值即可。

怎麼求m?

先看乙個簡單的問題:

27!裡面有多少個3相乘?

27!=1*2*...*27

包含1個3的數有27/(3^1)=9個

包含2個3的數有27/(3^2)=3個

包含3個3的數有27/(3^3)=1個

總共:9+3+1=13個

所以27!裡面有13個3相乘。

用這個方法就可以求得m!有多少個ai相乘,二分判斷即可。

**

1

var2

n,m,nm,max:longint;

3 shi:array [0..10001] of

longint;

4 a,v:array [0..100001] of

longint;

5procedure

try1;

6var

7i,j:longint;

8bo:boolean;

9begin

10 fillchar(v,sizeof(v),0

);11 m:=0;12

for i:=2

to100000

do13

begin

14 bo:=true;

15for j:=2

to trunc(sqrt(i)) do

16if i mod j=0

then

17begin

18 bo:=false;

19break;

20end;21

if bo then

22begin

23inc(m);

24 shi[m]:=i; v[i]:=1;25

end;

26end;27

end;

2829

procedure

init;

30var

31i,j,x:longint;

32begin

33 fillchar(a,sizeof(a),0

);34 readln(n); nm:=0; max:=0;35

for i:=1

to n do

36begin

37read(x);

38 j:=1;39

while x<>1

do40

begin

41if v[x]=1

then

42begin

43if x>max then max:=x;

44inc(nm); inc(a[x]);

45break;

46end;47

while x mod shi[j]=0

do48

begin

49inc(nm);

50inc(a[shi[j]]);

51 x:=x div

shi[j];

52end;53

if (a[shi[j]]>0) and (shi[j]>max) then

54 max:=shi[j];

55inc(j);

56end;57

end;

58end;59

60function

fd(x:longint):boolean;

61var

62i:longint;

63j,ans:int64;

64begin

65 i:=1;66

while (shi[i]<=max) and (i<=m) do

67begin

68 j:=shi[i]; ans:=0;69

while jdo

70begin

71 ans:=ans+x div

j;72 j:=j*shi[i];

73if ans>=a[shi[i]] then

break;

74end;75

if ansthen

exit(false);

76inc(i);

77end;78

exit(true);

79end;80

81procedure

main;

82var

83l,r,mid:longint;

84begin

85 l:=max; r:=10000000;86

while l<=r do

87begin

88 mid:=(l+r) div2;

89if fd(mid) then r:=mid-1

90else l:=mid+1;91

end;

92 writeln(r+1

);93

end;

9495

begin

96 assign(input,'

factorial.in');

97 assign(output,'

factorial.out');

98reset(input);

99rewrite(output);

100try1;

101init;

102main;

103close(input);

104close(output);

105end.

noip2008 ISBN號碼 (模擬)

a1163.isbn號碼 時間限制 1.0s 記憶體限制 256.0mb 總提交次數 691ac次數 268 平均分 62.95 將本題分享到 檢視未格式化的試題 提交試題討論 試題 noip2008 普及組 問題描述 每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括9位數字 1位識...

5809 NOIP2008模擬 數羊

description 牧羊人a和牧羊人b總是很無聊,所以他們要玩乙個遊戲。a有a隻羊,b有b隻羊。他們想要知道a b的因子和是多少。這就很為難兩個牧羊人了,由於答案太大,你能不能告訴我答案取模9901的數。input 僅一行,為兩個正整數a和b。output a b的因子和對9901的餘數。sol...

5775 NOIP2008模擬 農夫約的假期

description 在某國有乙個叫農夫約的人,他養了很多羊,其中有兩頭名叫mm和hh,他們的歌聲十分好聽,被當地人稱為 魔音 農夫約也有自己的假期呀!他要去海邊度假,然而mm和hh不能離開他。沒辦法,他只好把他們兩個帶上。到了海邊,農夫約把他的羊放在乙個 n n 的矩陣 有n n個方格 裡。mm...