HAOI2007反素數

來源:互聯網
上載者:User

標籤:des   style   class   blog   code   http   

1053: [HAOI2007]反素數antTime Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1346  Solved: 732
[Submit][Status]Description

對於任何正整數x,其約數的個數記作g(x)。例如g(1)=1、g(6)=4。
  如果某個正整數x滿足:g(x)>g(i) 0<i<x,則稱x為反質數。例如,整數1,2,4,6等都是反質數。
現在給定一個數N,你能求出不超過N的最大的反質數嗎?

Input

一個數N(1<=N<=2,000,000,000)。

Output

不超過N的最大的反質數。

Sample Input1000

Sample Output840
HINT

題解:

先篩質數,首先我們知道分解質因數後 i=p1^s1*p2^s2...pk^sk;那麼g(i)=(s1+1)*(s2+1)*(s3+1)...(sk+1)

所以我們枚舉質數的指數,直接枚舉不太好

我們可以發現一個性質,反質數的各個指數一定是不上升的,因為上升的情況我們可以翻轉上升的那一段,使得g不變i變小,這個時候搜尋就無壓力了

一開始沒注意,其實前十個質數相乘已經很大了,我們只要前十個就行了

還有就是,要記錄現在ans的g,如果有一樣的g,要選小的那個

代碼:

 1 const p:array[1..10] of longint=(2,3,5,7,11,13,17,19,23,29); 2 var n,ans,num:int64; 3 procedure dfs(x,y,z,k:int64); 4  var i:longint; 5  begin 6  if (num<k) or ((num=k) and (x<ans)) then 7   begin 8    ans:=x;num:=k; 9   end;10  for i:=1 to y do11   begin12    x:=x*p[z];13    if x>n then exit;14    dfs(x,i,z+1,k*(i+1));15   end;16   end;17 procedure main;18  begin19  readln(n);20  dfs(1,n,1,1);21  writeln(ans);22  end;23 begin24  main;25 end.          
View Code

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.