• 【BZOJ 1053】[HAOI2007]反素数ant


    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    用小的质数去凑那个数字。 显然比用大质数去凑划算。 因为 对于$x = p1^{q1}*p2^{q2}*...*pn^{qn}$ x的因子个数等于(q1+1)*(q2+1)....*(qn+1); 显然 你用的质数越小。 这个指数就能更大一点。 (表示相同的数字的情况下。至少不会更差。

    根据这个。
    又有235....2329>2*10^9
    则只要考虑这10个质数就可以了。
    枚举它们用了多少个。
    (即枚举各个质数的指数
    (找出最优解就好。

    【代码】

    #include <bits/stdc++.h>
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define all(x) x.begin(),x.end()
    #define pb push_back
    #define ls l,mid,rt<<1
    #define rs mid+1,r,rt<<1
    using namespace std;
    
    const double pi = acos(-1);
    const int dx[4] = {0,0,1,-1};
    const int dy[4] = {1,-1,0,0};
    const int a[11] = {1,2,3,5,7,11,13,17,19,23,29};
    
    LL n;
    LL ansnum=-1,ansyueshu;
    
    void dfs(LL cur,LL idx,LL cnt,LL yueshu){
        if (idx>10) return;
        //超过范围结束。
    
        //cur大于n了,那么结束
        if (cur>n) return;
        if (ansnum==-1){
            ansnum = cur;
            ansyueshu = yueshu;
        }else{
            if (yueshu>ansyueshu){
                ansnum = cur;
                ansyueshu = yueshu;
            }else if (yueshu==ansyueshu){
                if (cur<ansnum){
                    ansnum = cur;
                    ansyueshu = yueshu;
                }
            }
        }
    
        //还是选择这个数字继续乘。
        dfs(cur*a[idx],idx,cnt+1,yueshu/(cnt+1)*(cnt+2));
    
        //选择下一个数字乘。
        dfs(cur,idx+1,0,yueshu);
    }
    
    int main(){
    	#ifdef LOCAL_DEFINE
    	    freopen("rush_in.txt", "r", stdin);
    	#endif
    	scanf("%lld",&n);
        //当前数字,当前选择的是第几个数字,这个数字乘了几次,约数个数
        dfs(1,1,0,1);
        printf("%lld
    ",ansnum);
    	return 0;
    }
    
    
  • 相关阅读:
    JS之事件及冒泡
    DOM读取和修改内联样式
    dom查询与修改的一些常用方法
    js修改this指向的三种方法(call,bind,apply)
    JS原型概念
    JS创建对象
    JS的this(谁调用就指向谁)
    变量声明提前与函数声明提前
    JS对象创建
    正则应用之数据采集房屋网站信息
  • 原文地址:https://www.cnblogs.com/AWCXV/p/8542273.html
Copyright © 2020-2023  润新知