题目链接

对于任意的正整数\(x\),记其约数的个数为\(g(x)\)。现在定义反素数:对于\(0<i<x\),都有\(g(x)>g(i)\),那么就称x为反素数。

现在给定一个数N,满足\(1\leq N\leq 2*10^9\),求出不超过\(N\)的最大的反素数。

 

由反素数的定义我们知道,若\(x\)为反素数,那么\(x\)肯定是具有相同约数个数的数中最小的那一个;并且x的约数个数应该是最多的。

很明显直接枚举肯定要炸。观察到\(N\)不会超过\(2*10^9\),那么就可以知道:\(1\)~\(N\)中任何数质因子都不超过10个,并且所有质因子的指数总和不超过30。

然后。。反素数还有一个关键的性质,就是将它质因数分解过后,其指数是单调不增的。证明的话可以考虑交换两项的指数来考虑,对于一个\(p^{k_1}\),假设存在一个\(q^{k_2}\)并且满足\(p<q,k_1<k_2\),那么交换\(k1,k2\),会得到一个更小的且约数相同的数。

那么之后我们可以直接利用这些性质爆搜就好了。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
const int N = 105;
ll n;
ll prime[N] = {1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
ll c[N];
ll qp(ll a, ll b) {
ll ans = 1 ;
while (b) {
if(b & 1)
ans = ans * a;
a = a * a;
b >>= 1;
}
return ans ;
}
ll ans, num;
void dfs(int k, int p, ll mul) {
if(k == 11) {
ll tmp = 1;
for(int i = 1; i <= 10; i++) {
tmp *= (c[i] + 1);
}
if(tmp > num) {
num = tmp;
ans = mul;
} else if(tmp == num && ans > mul) {
ans = mul;
}
return ;
}
ll cnt = 0;
for(; cnt <= p; cnt++) {
if(qp(prime[k], cnt)*mul > n) {
if(cnt > 0)
cnt--;
break ;
}
}
cnt = min(cnt , (ll)p);
for(int i = cnt; i >= 0; i--) {
c[k] = i;
dfs(k + 1, cnt, mul * qp(prime[k], i));
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
dfs(1, 31, 1);
cout << ans;
return 0;
}

BZOJ1053:反素数(数学)的更多相关文章

  1. BZOJ1053 反素数

    题目大意 对于任何正整数x,其约数的个数记作g(x).如果某个正整数x满足对任意的0<i<x,都有g(x)>g(i) ,则称x为反质数.现在给定一个数N,求出不超过N的最大的反质数. ...

  2. 【BZOJ1053】 反素数ant

    BZOJ1053 反素数ant 我们先考虑唯一分解定理求出约数个数: \(x=a_1^{p_1}a_2^{p_2}a_3^{p_3}...a_k^{p_k}\) 然后\(num=\Pi_{i=1}^k ...

  3. [BZOJ1053][SDOI2005]反素数ant 数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1053 假设这个最大的反素数为$x$,那么$1<p<x$中数的因子数都没有$x$ ...

  4. 【bzoj1053】反素数

    [bzoj1053]反素数 题意 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例 ...

  5. BZOJ1053 [HAOI2007]反素数ant 数论

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1053 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正 ...

  6. 【BZOJ1053】[HAOI2007]反素数(搜索)

    [BZOJ1053][HAOI2007]反素数(搜索) 题面 BZOJ 洛谷 题解 大力猜一下用不了几个质因子,那么随便爆搜一下就好了. #include<iostream> #inclu ...

  7. 【BZOJ1053】[HAOI2007]反素数

    [BZOJ1053][HAOI2007]反素数 题面 bzoj 洛谷 题解 可以从反素数的定义看出小于等于\(x\)的最大反素数一定是约数个数最多且最小的那个 可以枚举所有的质因数来求反素数,但还是跑 ...

  8. 【BZOJ1053】[HAOI2007]反素数ant 暴力

    [BZOJ1053][HAOI2007]反素数ant Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) ...

  9. bzoj1053: [HAOI2007]反素数ant

    51nod有一道类似的题...我至今仍然不会写暴搜!!! #include<cstdio> #include<cstring> #include<iostream> ...

随机推荐

  1. 查看linux端口对应的进程id

    例如:查看占用4040端口的进程 ss -lptn 'sport = :4040'

  2. Python序列之元组 (tuple)

    作者博文地址:http://www.cnblogs.com/spiritman/ Python的元组与列表类似,同样可通过索引访问,支持异构,任意嵌套.不同之处在于元组的元素不能修改.元组使用小括号, ...

  3. 马赛克是否无法逆转?Python简单消除,看片无忧!

    图片水印,轻松去除 前段时间玩过了全民K歌,不知道大家是否玩过,还是做得挺好的,就我这嗓子都能唱出张学友的味道,其中更是有消除噪声的功能,就是朋友们都在吃鸡大叫,我在旁边唱歌依然不受影响. 既然声音可 ...

  4. scrapy有用的(代理,user-agent,随机延迟等)

    代理 方法一(待测试) 见scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware import os # 设置相应的代理用户名密码,主机和 ...

  5. 基于NABCD评论作业-王者荣耀交流协会PSP DAILY

    一.根据(不限于)NABCD评论作品的选题   N(Need,需求):在我知道PSP DAILY这款软件的时候,就认为这款软件对于学习软件工程课的学生来说有很大的需要.对于需求来说,软件工程课程中的学 ...

  6. Beta发布--PSP DAILY软件功能说明书2.0

    一.开发背景 你在完成了一周的软件工程作业后,需要提交一个PSP图表,里面有4项,如下所示: 1.本周PSP表格,包含每项任务的开始.中断.结束.最终时间,格式如下: 2.本周进度条,包含从开始到现在 ...

  7. [buaa-SE-2017]个人作业-week3

    个人作业-week3:案例分析 分析产品:Bing词典 Part1:调研&评测 1.软件评测和Bug汇报 这次我选择Bing词典的原因是在于,首先我使用过的词典软件较多,平台涵盖PC端.网站. ...

  8. 团队冲刺--Seven

    昨天: 司宇航:测试功能版块,优化功能版块. 马佳慧:优化界面 . 王金萱:合并程序. 季方:  合并程序. 今天: 司宇航:优化功能版块. 马佳慧:优化界面 . 王金萱:优化界面. 季方:  完善功 ...

  9. 冲刺One之站立会议6 /2015-5-19

    2015-5-19 今天把服务器端的界面完善了一下,然后大家查了好多资料,实现了登陆界面实际连接的功能,开始加了一个它和服务器的的跳转,但是分析过后发现这是个没有必要的跳转.登录应该直接转到聊天室的主 ...

  10. Teamwork(The first day of the team)

    今天是第一次的小组讨论,我们主要是分析了我们的大概方向及大概功能及相应的分工.其实具体也还没有确定下来,只是大概的说了一下,确定了master为杨灵超同学.下面用图片记录我们这一天的工作内容(杨灵超V ...