c语言求质因子(质数且是输入数的因子)最多的那个数

n<10^9;时间复杂度在10^8内,谢谢大神来看题输入n,求1~n中质因子最多的那个数... n<10^9;时间复杂度在10^8内,谢谢大神来看题
输入n,求1~n中质因子最多的那个数
展开
 我来答
jimmy14888888
推荐于2016-10-10 · TA获得超过1340个赞
知道小有建树答主
回答量:550
采纳率:80%
帮助的人:359万
展开全部

要找到满足题意的数,

就是小于等于n的最大的2的幂,


证明:

假设这个数m是2^k,并且2^k小于等于n。

那么它有k个质因子(都是2),

反证法:

假如某个数x有k+1个因子,

质数里面最小的是2,那么该数x一定满足:

m<2^(k+1)<=x<=n

因为m是小于等于n的最大的2的幂,因此x不存在。


所以m就是小于等于n的最大的2的幂。

(注意这里说的是最多有k个因子,最小的是2^k,k个因子还可能是2^(k-1)*3,也是有可能的,但是就是不可能有k+1个因子)


代码:

#include <stdio.h>
unsigned flp2(unsigned x)
{
x = x | (x >> 1);
x = x | (x >> 2);
x = x | (x >> 4);
x = x | (x >> 8);
x = x | (x >> 16);
return x - (x >> 1);
}
int main()
{
printf("%u", flp2(1000000000));
return 0;
}
追问
额,看不懂。。。。能换一种表达方式吗?
追答
就是说,满足条件的最小的那个数,一定是
2*2*2...这种形式,
就是2的幂。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式