码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj1053

时间:2018-02-24 23:07:31      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:name   分享   close   splay   []   很多   open   body   scan   

搜索

这种$n$很大并且跟约数有关的题都是搜索,因为约数每次除一下大概是$log$级的。

这道题我们希望一个数的约数个数尽量大才能成为反质数,所以涉及的因子不会很多

然后爆搜一发,枚举每个因子用不用,用几次,复杂度很低

技术分享图片
#include<bits/stdc++.h>
using namespace std;
const int p[] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31}; 
int n, ans = 1, c = 1;
void dfs(int k, long long tot, long long cnt) {
    if(k == 12) {
        return;
    }
    if(tot < ans && cnt >= c) {
        c = cnt;
        ans = tot;
    }
    if(tot > ans && cnt > c) {
        c = cnt;
        ans = tot;
    }
    long long t = p[k];
    for(int i = 1; i <= 20; ++i) {
        if(tot * t <= n) {
            dfs(k + 1, tot * t, cnt * (i + 1));
        } else {
            break;
        }
        t *= p[k];
    }
}
int main() {
    scanf("%d", &n);
    dfs(1, 1, 1);
    printf("%d\n", ans);
    return 0;
}
View Code

 

bzoj1053

标签:name   分享   close   splay   []   很多   open   body   scan   

原文地址:https://www.cnblogs.com/19992147orz/p/8467701.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!