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的最大的反质数。

woc,神仙题.

一.暴力\(O(n^{\frac{5}{2}})\) \(40pts\)

直接写暴力的话,可以\(get\)到\(40pts\)

暴力怎么写?

直接倒叙枚举\(n\),再判断当前\(i\)是否满足条件.(再枚举一层\(j\))

这样

for(R int i=n;i;i--)
{
R int res=calc(i);
bool flg=false;
for(R int j=1;j<i;j++)
if(res<=calc(j)){flg=true;break;}
if(!flg)
{
printf("%d",i);
break;
}
}

上面的\(calc\)函数是计算约数个数,\(\sqrt{n}\)的复杂度.

二,正解

还好突然想起来结论.

首先根据唯一分解定理

\[x=p_1^{k_1} \times p_2^{k_2} \times p_3^{k_3} \times \dots
\]

这里的\(p\)全部都是质数.

然后结论就是.

\[d(x)=(k_1+1)\times(k_2+1)\times \dots
\]

其实真正的定义的话,\(d(x)\)代表\(x\)的约数个数.

因此搜索就好了,枚举每一个质数的\(k\)次方,记录答案.

需要注意的是,当某一个数的约数个数之前已经出现过,那我们要取较为靠前的一个.

(因为题目要求必须严格\(>\))

代码

#include<cstdio>
#include<cctype>
#define int long long
#define R register
#define N 10000008
using namespace std;
inline void in(int &x)
{
int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
}
int prime[20]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59};
int ans,mx,n;
void dfs(int dep,int now,int cnt)
{
if(dep>=11)return;
if(cnt>mx)mx=cnt,ans=now;
if(cnt==mx and ans>now)ans=now;
for(R int i=1;i<=32;i++)
{
if(now*prime[dep]>n)break;
dfs(dep+1,now*=prime[dep],cnt*(i+1));
}
}
signed main()
{
in(n);
dfs(1,1,1);
printf("%lld",ans);
}

数学结论【p1463】[POI2002][HAOI2007]反素数的更多相关文章

  1. Luogu P1463 [POI2002][HAOI2007]反素数【数论/dfs】By cellur925

    题目传送门 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1 ...

  2. 洛谷 P1463 [POI2002][HAOI2007]反素数

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

  3. 【题解】洛谷P1463 [POI2002][HAOI2007] 反素数(约数个数公式+搜索)

    洛谷P1463:https://www.luogu.org/problemnew/show/P1463 思路 约数个数公式  ai为质因数分解的质数的指数 定理: 设m=2a1*3a2*...*pak ...

  4. [POI2002][HAOI2007]反素数

    题意 反素数 想法 证明这样一个结论 对于一个可行的反素数\(p\) \(p = \sum_{i}^{k} p_{k} ^ {c_k}\) 当 \(p_i > p_j 有 c_i < c_ ...

  5. [POI2002][HAOI2007]反素数 数论 搜索 好题

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

  6. [POI2002][HAOI2007]反素数(Antiprime)

    题目链接 这道题需要用到整数唯一分解定理以及约数个数的计算公式.这里我就不再阐述了. 公式可以看出,只有指数影响约数个数,那么在唯一分解出的乘式中,指数放置的任何位置都是等价的.(即 23*34*57 ...

  7. 【BZOJ1053】[HAOI2007]反素数 (搜索+数论)

    \([POI2002][HAOI2007]\)反素数 题目描述 对于任何正整数x,其约数的个数记作\(g(x)\).例如\(g(1)=1.g(6)=4\). 如果某个正整数x满足:\(g(x)> ...

  8. [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1907  Solved: 1069[Submit][St ...

  9. BZOJ 1053: [HAOI2007]反素数ant dfs

    1053: [HAOI2007]反素数ant 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1053 Description 对于任何正整 ...

随机推荐

  1. [HDU5956]The Elder

    题面在这里 题意 一个王国中的所有城市构成了一棵有根树,其根节点为首都,编号为1 树有边权,城市的记者每次向祖先移动\(d\)的路程需要的代价为\(d^2\), 如果祖先不是根还需要加上\(p\),求 ...

  2. BZOJ1407 [Noi2002]Savage 【扩展欧几里得】

    题目链接 BZOJ1407 题解 枚举\(m\)用扩欧判即可 #include<algorithm> #include<iostream> #include<cstrin ...

  3. vector 进阶

    http://classfoo.com/ccby/article/jnevK #include <iostream> #include <vector> #include &l ...

  4. POJ2559 Largest Rectangle in a Histogram (单调栈

    Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26012 ...

  5. AngularJs学习——何时应该使用Directive、Controller、Service?

    翻译:大漠穷秋 原文链接:http://kirkbushell.me/when-to-use-directives-controllers-or-services-in-angular/ 一.简述 A ...

  6. Fragment使用--文章集锦

    android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态 Android Fragment 真正的完全解析(上) Android Fragment实 ...

  7. java web标签

    一:国庆结束了,回来上班,结果老大说过两天才出差,所以这两天就用来补自己不太懂的知识或者以前没有熟悉的知识,jsp的标签就是,因为在项目中自己封装了一些标签,但是我自己只是会用,真正的原理性的东西我还 ...

  8. hive向表格中插入数据并分析语句

    1,---导入mds_imei_month_info ; //最大的动态分区表 set hive.support.concurrency=false; //是否支持并发 ; //each mapper ...

  9. bzoj 2152 点剖分

    比较裸的点剖分,访问到每个重心时,记录一个b数组, 代表当前子树中长度为i的边的数量是b[i],因为是3的倍数, 所以边长mod 3保存就行了,然后记录一个sum数组,代表 当前子树中一个子节点为根的 ...

  10. jQuery获取表格隐藏域与ajax请求数据结合显示详情

    0.表格样式