首页 > 其他分享 >P1463 [POI2001] [HAOI2007] 反素数 题解

P1463 [POI2001] [HAOI2007] 反素数 题解

时间:2023-09-02 14:34:02浏览次数:35  
标签:cnt int 题解 POI2001 P1463 HAOI2007 素数 ans now

P1463 [POI2001] [HAOI2007] 反素数 题解

可以发现,最大的不超过 \(n\) 的反素数就是 \(1\sim n\) 中因数最多的数字。

证明:

设 \(x, x\in[1, n]\) 为 \(1\sim n\) 中因数最多的数字,则 \(x<y \le n\) 都不会成为答案,因为存在 \(x < y\) 因数比 \(y\) 多,同时也不会存在 \(y' < x\) 的 \(y'\) 的因数比 \(x\) 多,因为定义,所以 \(x\) 即为不超过 \(n\) 的最大反素数。

然后可以爆搜质因数的指数,加一些剪枝可以很快搜出来(\(30ms\))。

// Problem: P1463 [POI2001] [HAOI2007] 反素数
// Contest: Luogu
// Author: Moyou
// Copyright (c) 2023 Moyou All rights reserved.
// Date: 2023-09-02 14:05:50

#include <iostream>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
typedef long long ll;
int prime[] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29}, n; // 最多到23,因为它们乘起来已经超过2e9了
PII ans;
void dfs(int u, int now, int cnt, int lim) { // 顺序剪枝
    if(u > 10 || now > n) return ; // 可行性剪枝
    if(cnt > ans.y || (cnt == ans.y && now < ans.x)) ans = {now, cnt};
    for(int i = 1; i <= lim; i ++) {
        if(1ll * now * prime[u] > n) return ;
        now *= prime[u];
        dfs(u + 1, now, cnt * (i + 1), i);
    }
}

signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n;
    ans = {1, 1};
    dfs(1, 1, 1, 1e9);
    cout << ans.x << '\n';

    return 0;
}

标签:cnt,int,题解,POI2001,P1463,HAOI2007,素数,ans,now
From: https://www.cnblogs.com/MoyouSayuki/p/17673642.html

相关文章

  • vmware中的疑难问题解决方法
    converter在windows中使用的agent服务端口9089,vcenter使用443端口。converter再windows中不能启动服务的解决方法:1.开启TLS1.01.11.2。在programdata中更改SSLOPTIONS的值为:56313856。可以尝试官方方法2.禁用网络连接:在注册表中localmachine-system-currentcontrolset-contro......
  • CF 1863D 题解
    CF1863DTwo-ColoredDominoes题解Links洛谷CodeforcesDescription有一个\(n\timesm\)的棋盘,上面铺着一些\(1\times2\)的多米诺骨牌(横竖均有可能),骨牌之间没有重叠。你需要找到一种染色方案满足以下条件:每个多米诺骨牌一端被染白,另一端被染黑。其他没有骨牌的格子......
  • 题解 [AGC004D] Teleporter
    题目链接躺在床上想到重要性质的题目。。。首先,由于每个城市只有一个可以直接到达的城市,所以\(n\)个城市就有\(n\)条边,容易发现这是一棵基环树,那么我们先从普通树的角度考虑,若要求每个点走\(k\)条边恰好到\(1\)号节点,这个环必须加在哪里。若\(k=1\),没有环显然也是可行......
  • GCD Counting题解
    题意有一棵有\(n\)个节点的树,第\(i\)个节点有点权\(a_i\)。定义\(g(x,y)\)为\(x\)到\(y\)的树上路径所经过的点的点权\(\gcd\)。对于每一个正整数\(k\in[1,2\times10^5]\)求出满足以下条件的\(x,y\)的对数:\(1\lex\ley\len\)\(g(x,y)=k\)\(1\len......
  • CF915G Coprime Arrays 题解
    题意给定\(n,k\),对于所有的\(m\in\left[1,k\right]\),求长度为\(n\),值域为\(\left[1,m\right]\)且最大公约数为\(1\)的序列种数,对\(10^9+7\)取模。(\(1\len,k\le2\times10^6\))。题解设\(f(d,m)\)表示长度为\(n\),值域为\(\left[1,m\right]\)且最大......
  • [NOI2021] 轻重边题解
    题目传送门一眼数据结构考虑树上有什么数据结构支持\(x\)到\(y\)节点的修改和查询,那就是:树链剖分。那么这道树链剖分的题有个\(trick\):边点转换&染色法,对于每次修改,考虑将修改路径上的点全部染上一种独一无二的颜色,而查询的时候,就查询路径上相邻的相同的颜色节点个数即可......
  • 爱思创模拟06试题易错题解析
    错误原因:漏项正确答案:C按节点数分类穷举 举一反三:  错误原因:处理三个空位的时候,情况考虑的太多正确答案:分情况计算,先枚举4个人共A(4,4)=24种情况,再考虑剩下两个空位置的情况,即A(5,2)=20种情况,最终答案就是24*20=480种举一反三:  错误原因:不会计算时间复杂度......
  • 题解 正妹吃月饼
    题目链接由于每个质量的月饼只有一个,并且质量恰好是2的整数倍,所以考虑将一个质量看成一个二进制位。那么也就是说,我们要构造一个二进制数\(x\),使得\(x\)的\(1\)的个数最多,且满足\(a\lex\leb\)。那么这就可以用类似数位\(DP\)的思路来做,从高位往低位看,若\(a_i=b_i=1......
  • NOIP2012提高组初赛易错题解析
    一.3. 错误原因:忘记了解析:Intel是全球最大的CPU厂商,AMD是世界上首个研发出7纳米CPU的厂商 6.错误原因:忘记了解析:ENIAC是世界上首台计算机,属于第一代计算机,即电子管计算机 10.错误原因:选项理解错误解析:A由蝙蝠,发明雷达是正确的,B因特网的发明与蜘蛛网无关,只是形......
  • NOIP2011提高组初赛易错题解析
    一.7.错误原因:不知道解析:快速排序在理论上最低的时间复杂度为O(n),但实际最低的时间复杂度为O(nlogn) 二.1.错误原因:漏项了解析:这棵树最少有12层,但题目是问可能是几层,所以还可能是2011层 5.错误原因:漏了一种情况解析:这道题的树有两种,所以答案也有两种 ......