zoukankan      html  css  js  c++  java
  • 1053: [HAOI2007]反素数ant

    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 Input
    1000

    Sample Output
    840

    终于忍住没看题解,自己成功想出一个题

    先筛质数,首先我们知道分解质因数后 i=p1^s1*p2^s2...pk^sk;那么g(i)=(s1+1)*(s2+1)*(s3+1)...(sk+1)

    所以我们枚举质数的指数,直接枚举不太好

    我们可以发现一个性质,反质数的各个指数一定是不上升的,因为上升的情况我们可以翻转上升的那一段,使得g不变i变小,这个时候搜索就无压力了

    一开始没注意,其实前十个质数相乘已经很大了,我们只要前十个就行了

    还有就是,要记录现在ans的g,如果有一样的g,要选小的那个

     1 const
     2     zhi:array[1..10]of integer=(2,3,5,7,11,13,17,19,23,29);
     3 var
     4     n,tot,ans,num:longint;
     5 
     6 procedure try(x:int64;y,z,k:longint);
     7 var
     8     i:longint;
     9 begin
    10     if (num<k) or ((num=k) and (x<ans)) then
    11     begin
    12       ans:=x;
    13       num:=k;
    14     end;
    15     for i:=1 to y do
    16       begin
    17         x:=x*zhi[z];
    18         if x>n then exit;
    19         try(x,i,z+1,k*(i+1));
    20       end;
    21 end;
    22 
    23 begin
    24     read(n);
    25     try(1,n,1,1);
    26     write(ans);
    27 end.
    View Code
  • 相关阅读:
    expd,impd常用命令
    linux oracle 服务重启过程
    oracle 锁表查询及kill
    oracle 存储过程卡无法编辑
    oracle 各版本之间的导入导出
    与linux 病毒的一次接触
    一分钟读懂PDCA 循环
    5W2H分析法——你肯定听过的一种思维工具
    你真的懂如何进行用户调查么?
    精选互联网运营必读的 8 本书籍
  • 原文地址:https://www.cnblogs.com/Randolph87/p/3652623.html
Copyright © 2011-2022 走看看