反质数

题目大意:

对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。

如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数2,4,6等都是反质数。

现在给定一个数N,求出不超过N的最大的反质数。

 

其实这道题就是根据每个整数都可以拆分成x1p1x2p2...xnpn,(xi为质数)且X1>X2>...Xn则有P1>P2>...Pn,按照质数顺序搜索即可。

program Neayo;
const
        inf='input.txt';
        ouf='output.txt';
        g:array[1..16] of int64=(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53);
var
   i,j,k,ansi:longint;
   a:array[0..17]of longint;
   n,ans:int64;
procedure init;
begin
     assign(input,inf);assign(output,ouf);
     reset(input);rewrite(output);
     readln(n);
     close(input);
end;

procedure go(now,pre,num:int64;m:longint);
var i:longint;
begin
     if (m>ansi)or((m=ansi)and(num<ans))then
     begin
          ansi:=m;ans:=num;
     end;
     if now>15 then exit;
     for i:=1 to pre do
     begin
          if num*g[now]>n then exit;
          num:=num*g[now];
          if num>n then exit;
          go(now+1,i,num,m*(i+1));
     end;
end;
begin
     init;
     ans:=1;ansi:=1;
     go(1,100,1,1);
     writeln(ans);
     close(output);
end.                                    

 

 

posted @ 2012-10-14 19:09  neayo  阅读(290)  评论(0编辑  收藏  举报