| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4218 人关注过本帖
标题:[求助]如何判断一个数字不是3的幂?
取消只看楼主 加入收藏
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
 问题点数:0 回复次数:5 
[求助]如何判断一个数字不是3的幂?
如何判断一个数字不是3的幂?要求方法比较简洁!
注意:请不要用一直除3,看余数这个方法,因为我也会,如果能更高效的化就更好了!
搜索更多相关主题的帖子: 数字 判断 
2007-01-20 01:48
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
得分:0 
自己先顶一个,我的想法是先编一个3^n的表,然后用折半查找,可是觉得这样依然很浪费时间,因为先要写个出表程序,而且还要从表里查找,这个算法的复杂度是不是太高呢?(本人没学数据结构不会分析,只是看了一点书对这个一知半解,不要见笑)

我不是名人,所以不要签名。等哪天我成名人了......你都认识我了还要签名干嘛!
2007-01-20 02:05
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
得分:0 
昨天做这题做到今天5点,所以睡到现在才起,看了大家讨论觉得很不错,首先5楼的n%3==0肯定不行因为这是求3的倍数不是求3的冪,我只想求3的冪,其他不想.11楼其实我也看过这些,但觉的有些深,看不懂.我有一个思路但估计实现不了思路如下:
设一个数为N,且N为3的冪,N=3^n,log(3,N)=n,ln3/lnN=n,若两数相除为整数则一定为三的冪,不知对不对

我不是名人,所以不要签名。等哪天我成名人了......你都认识我了还要签名干嘛!
2007-01-20 18:22
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
得分:0 
晕死,犯了个天大的错误,浮点小数是无法比较的也就是2.000000000和2.0000000001是无法比较的,这下我没辙了,唉!

我不是名人,所以不要签名。等哪天我成名人了......你都认识我了还要签名干嘛!
2007-01-20 18:47
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
得分:0 
谢谢楼上的各位,这题我想出来解法如下:
#include<stdio.h>
int main()
{
int x=3,n;
scanf("%d",&n);
if(n==3) printf("yes!");
else
{
do
{
x+=x*2;
}while(x<n);
if(x==n) printf("yes");
else printf("no");
}
getch();
return 0;
}
ps:3的冪可以看成是3*3……*3(n个3相乘),3的2进制为11,所以3*3=11*11即110+11,同理27=9*3=1001*11=10010+11,可以得出如下结论,3的冪可以写成N=3^(n-1)*2+3^(n-1),最后让N无限逼近目标M,看M是否为N就可以了
就是不知道执行时间是多少,不知道谁可以帮我做个测试,感激不禁啊!

我不是名人,所以不要签名。等哪天我成名人了......你都认识我了还要签名干嘛!
2007-01-20 22:14
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
得分:0 
17楼,有错误吗?我用的是win-tc,你试试去到getch();试试,如果还有错误能贴出来让我看看吗?20楼的强制取整有点意思,回头试试看,这说不定也是一种方案!

我不是名人,所以不要签名。等哪天我成名人了......你都认识我了还要签名干嘛!
2007-01-21 23:13
快速回复:[求助]如何判断一个数字不是3的幂?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011902 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved