zoukankan      html  css  js  c++  java
  • 【BZOJ】【1053】【HAOI2007】反素数ant

    搜索


      经典搜索题目(其实是蒟蒻只会搜……vfleaking好像有更优秀的做法?)

      枚举质数的幂,其实深度没多大……因为$2^32$就超过N了……而且质数不能取的太大,所以不会爆……

     1 /**************************************************************
     2     Problem: 1053
     3     User: Tunix
     4     Language: C++
     5     Result: Accepted
     6     Time:40 ms
     7     Memory:1760 kb
     8 ****************************************************************/
     9  
    10 //BZOJ 1053
    11 #include<cmath>
    12 #include<vector>
    13 #include<cstdio>
    14 #include<cstring>
    15 #include<cstdlib>
    16 #include<iostream>
    17 #include<algorithm>
    18 #define rep(i,n) for(int i=0;i<n;++i)
    19 #define F(i,j,n) for(int i=j;i<=n;++i)
    20 #define D(i,j,n) for(int i=j;i>=n;--i)
    21 #define pb push_back
    22 using namespace std;
    23 inline int getint(){
    24     int v=0,sign=1; char ch=getchar();
    25     while(ch<'0'||ch>'9'){ if (ch=='-') sign=-1; ch=getchar();}
    26     while(ch>='0'&&ch<='9'){ v=v*10+ch-'0'; ch=getchar();}
    27     return v*sign;
    28 }
    29 const int N=2e9,INF=~0u>>2;
    30 typedef long long LL;
    31 /******************tamplate*********************/
    32 int n,prime[100010],tot;
    33 LL mx=0,ans=0;
    34 bool vis[100010];
    35 //第x个质数,总乘积为now,因数个数为m
    36 void dfs(int x,LL now,LL m,int lim){
    37     if (m>mx && now<=n){
    38         mx=m; ans=now;
    39     }
    40     if (m==mx && now<ans && now<=n) ans=now;
    41     if (x>100) return;
    42     LL p=now;
    43     F(i,1,lim){
    44         if (p*prime[x]>n) break;
    45         p*=prime[x];
    46         dfs(x+1,p,m*(i+1),lim-i);
    47     }
    48 }
    49 int main(){
    50 #ifndef ONLINE_JUDGE
    51     freopen("1053.in","r",stdin);
    52     freopen("1053.out","w",stdout);
    53 #endif
    54     scanf("%d",&n);
    55     F(i,2,sqrt(N)){
    56         if (!vis[i]){
    57             prime[++tot]=i;
    58             for(int j=i*i;j<=sqrt(N);j+=i) vis[j]=1;
    59         }
    60     }
    61     dfs(1,1,1,20);
    62     printf("%lld
    ",ans);
    63     return 0;
    64 }
    View Code

    1053: [HAOI2007]反素数ant

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 1821  Solved: 1014
    [Submit][Status][Discuss]

    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

    [Submit][Status][Discuss]
  • 相关阅读:
    python3.6+requests实现接口自动化4
    python3.6+requests实现接口自动化3
    Druid学习之路 (五)Druid的数据摄取任务类型
    Druid学习之路 (四)Druid的数据采集格式
    Druid学习之路 (三)Druid的数据源和段
    Druid学习之路 (二)Druid架构
    Druid学习之路 (一)Druid初识
    Hive sql和Presto sql的一些对比
    Pyspark的HBaseConverters详解
    Pyspark访问Hbase
  • 原文地址:https://www.cnblogs.com/Tunix/p/4434193.html
Copyright © 2011-2022 走看看