P1463 [POI2001] [HAOI2007] 反素数

文章介绍了反质数的概念,即所有小于自身的正整数的约数个数都少于它的数。提出了利用质因数分解和数学原理来优化求解不超过给定数N的最大反质数的方法,避免暴力搜索导致超时。通过将质因数的指数按降序排列并枚举,可以找到满足条件的反质数,并给出C++代码示例进行实现。
摘要由CSDN通过智能技术生成

题目

题目描述

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

输入格式

一个数N

输出格式

不超过N的最大的反质数

样例

输入

1000

输出

840

说明/提示

1 ≤ N ≤ 2 × 1 0 9 1≤N≤2×10^9 1N2×109

思路与证明

第一眼看上去:暴搜,倒着枚举,输出第一个反素数
第二眼:2e9
好吧,暴搜明显是会TLE的,所以我们只能换个思路
g(x)怎么求呢?枚举所有因数然后统计个数吗,太慢了
x = ∏ p i k i x=\prod p_i^{k_i} x=piki(质因数分解定理),则 g ( x ) = ∏ ( k i + 1 ) g(x)=\prod (k_i+1) g(x)=(ki+1)(乘法原理)
有些蒙?举个例子 6 = 2 1 ∗ 3 1 6=2^1*3^1 6=2131
6的约数是哪几个呢?
不难想到
2 0 ∗ 3 0 = 1 2^0*3^0=1 203

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值