反质数
题目大意:
对于任何正整数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.