BZOJ1053 [HAOI2007]反素数ant 数论

欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


传送门 - BZOJ1053


题目描述

  对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。现在给定一个数N,你能求出不超过N的最大的反质数么?

(1<=N<=2,000,000,000)


题解

  对于任何一个反素数p,总有:

  p=2q1×3q2×5q3×7q4...

  而且q1>=q2>=q3>=q4>=...

  小小的证明:

  前置技能:对于任何一个数p=x1y1×x2y2×x3y3×x4y4....

  有p的因数个数为(y1+1)(y2+1)(y3+1)(y4+1)  ……

  如果不满足q1>=q2>=q3>=q4>=...

  假设qx<qy(x<y)

  那么必然存在一个q序列,交换qx和qy,使得这个数a的因数个数和p相等,且a<p,那么就就有g(a)=g(p),p>a,不满足g(p)>g(a),于是不成立。

  然后毕竟这样,还是会有一些因数个数相同的情况。

  比如数a的因数个数式子为:

  (y1+1)(y2+1)(y3+1)...

  构造b,是的b的式子为:

  (y1+y2+1)(y3+1)...

  所以我们还是要判断一下的。

  

  但是不考虑这个特殊情况,可以找出来的数已经很少了,所以我们可以dfs一下。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long LL;
const LL prime[11]={2,3,5,7,11,13,17,19,23,29};
LL n,ans,cnt;
void dfs(LL times,int pos,int ysz,int maxv){
    if (ysz>cnt)
        ans=times,cnt=ysz;
    else if (ysz==cnt&&times<ans)
        ans=times,cnt=ysz;
    for (int i=1;i<=maxv;i++){
        times*=prime[pos];
        if (times>n)
            return;
        dfs(times,pos+1,ysz*(i+1),i);
    }
}
int main(){
    scanf("%d",&n);
    ans=cnt=0;
    dfs(1,0,1,33);
    printf("%lld",ans);
    return 0;
}
时间: 2024-10-08 17:50:05

BZOJ1053 [HAOI2007]反素数ant 数论的相关文章

[BZOJ1053] [HAOI2007] 反素数ant (搜索)

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 Soluti

BZOJ1053 [HAOI2007]反素数ant

有一定的结论需要知道... 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 typedef long long LL; 6 LL ans,ans1,n,prime[8] = {2,3,5,7,11,13,17,19}; 7 void dfs(int id,int mmax,LL t,LL tt) 8 { 9 if(id>=8){ret

【BZOJ 1053】 1053: [HAOI2007]反素数ant (反素数)

1053: [HAOI2007]反素数ant 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

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

1053: [HAOI2007]反素数ant Description: g(x)表示x的约数个数,反素数:对于任意的i (i < x),均有g(i) < g(x),则x为反素数:现在输入不超过2e9的数,要你找出不超过N的最大的反素数: 坑点:里面的反素数是严格小于,所以对于相同的约数要取较小的. 思路:直接深搜外加剪枝即可: #include<iostream> #include<cstdio> #include<cstring> #include<

[HAOI2007]反素数ant

1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1907  Solved: 1069[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的最大的反质数么?

bzoj 1053: [HAOI2007]反素数ant 搜索

1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1497  Solved: 821[Submit][Status] 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

BZOJ1053 [HAOI2007]反素数 &amp; BZOJ3085 反质数加强版SAPGAP

BZOJ 1053 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 题解 可以发现,

Luogu P1463 [HAOI2007]反素数ant:数学 + dfs【反素数】

题目链接:https://www.luogu.org/problemnew/show/P1463 题意: 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6等都是反质数. 现在给定一个数N,你能求出不超过N的最大的反质数么? 题解: 对于一个反素数p有两个结论: 若将p表示为 ∏(a[i]^k[i])的形式,其中a[i]为质因子,k[i]为指数. (1)a[i]为从2

BZOJ——T 1053: [HAOI2007]反素数ant

http://www.lydsy.com/JudgeOnline/problem.php?id=1053 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的最大的反质数. S