zoukankan      html  css  js  c++  java
  • BZOJ 1053 反素数

    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

    HINT

     

    Source

    开始没有想清楚这个问题的本质,半小时后才发现这TM不就是要求1-n中约数最多的最小数。(自己稍微yy一下应该就可以了。)

    然后我们就要求1-n中约数最多的最小数。这个我们采用暴搜的方法,枚举每个质数的质数,推过去即可。

    开始我的质数范围是1-√n,果断TLE。其实只要用前12个质数就可以了,因为质数大了反而没有小质数对答案的贡献那么大。

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 using namespace std;
     5 
     6 typedef long long ll;
     7 int best,most,n,tot = 12;
     8 int prime[15] = {0,2,3,5,7,11,13,17,19,23,29,31,37};
     9 
    10 inline void dfs(ll now,ll num,int last)
    11 {
    12     if (num > most) most = num,best = now;
    13     else if (num == most && now < best) best = now;
    14     for (int i = last;i <= tot;++i)
    15     {
    16         ll key = 1;
    17         for (int j = 1;;++j)
    18         {
    19             key *= (ll)prime[i];
    20             if (now*key > n) break;
    21             dfs(now*key,num*(j+1),i+1);
    22         }
    23     }
    24 }
    25 
    26 int main()
    27 {
    28     freopen("1053.in","r",stdin);
    29     freopen("1053.out","w",stdout);
    30     scanf("%d",&n); 
    31     dfs(1,1,1); printf("%d",best);
    32     fclose(stdin); fclose(stdout);
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    zabbix-钉钉报警媒介
    UltraISO做U盘启动盘教程
    Oracle中的Spool缓冲池技术可以实现Oracle导出txt格式文件
    将Oracle数据库导出为txt格式
    2016技术发展趋势
    SVN分支和映射总结和数据库初步使用
    netty -- helloword
    eclipse 操作
    ftp 文件上传 下载
    redis 集群+主从同步
  • 原文地址:https://www.cnblogs.com/mmlz/p/4285019.html
Copyright © 2011-2022 走看看