| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1853 人关注过本帖
标题:一个数的次方解问题
只看楼主 加入收藏
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
收藏
已结贴  问题点数:4 回复次数:22 
一个数的次方解问题
ni现要找一种数。
定义:该数的所有次方根的整数解相乘仍然是它本身。

64的次方解只有8,4,2是整数。那么,先计算下、10,000以内的满足这个要求的数
上图:
图片附件: 游客没有浏览图片的权限,请 登录注册



烦请大侠们给点建议。。。

[ 本帖最后由 liucs116 于 2010-8-14 15:23 编辑 ]
搜索更多相关主题的帖子: 解问题 
2010-08-14 15:18
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:1 
    int x=64;

        for(int n=2; n<=x; n++)
            if( pow(x,1.0/float(n))==int(pow(x,1.0/float(n))) )    //保证x开n次方为整形
                cout<<pow(x,1.0/float(n))<<endl;


为什么在这步中,n=3的时候,应该得到的4是整形啊
可是为什么不显示呢?
如果能解决这个问题,我就能给楼主完整的程序
可是程序缺把4忽略了,好奇怪啊
请高手解决一下
2010-08-14 16:34
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
为什么pow(64,1.0/3)不==int(pow(64,1.0/3))  ????????
分明就是4啊
可是编译器输出pow(64,1.0/3)确实是4,整形
但是我尝试看pow(64,1.0/3)是否==int(pow(64,1.0/3))
答案却是不==
真T M D 奇怪啊
2010-08-14 16:42
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:1 
以下是引用carmeloyin在2010-8-14 16:42:09的发言:

为什么pow(64,1.0/3)不==int(pow(64,1.0/3))  ????????
分明就是4啊
可是编译器输出pow(64,1.0/3)确实是4,整形
但是我尝试看pow(64,1.0/3)是否==int(pow(64,1.0/3))
答案却是不==
真T M D 奇怪啊
是呀,结果没问题啊!pow(64,1.0/3) 是什么类型?double吧?认为结果应该为4.0,但是那就肯定有误差啊!!
你应该尝试fabs(pow(64,1.0/3)-int(pow(64,1.0/3)))<1e-6

悲剧了,刚才看了下式子 int(pow(64,1.0/2))  竟然是7 而不是我们想象的8,误差真是无处不在呢!

所以 上式该做如下处理: int(pow(64,1.0/2)+1e-6)  结果就没问题了,整数8  

[ 本帖最后由 jack10141 于 2010-8-14 17:35 编辑 ]

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 16:55
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 楼主 liucs116
程序代码:
#include "math.h"
#include "stdio.h"
main()
{
   int i,j,s;
   for(i=2;i<=10000;i++)
   {
       s=1;
       for(j=2;j<10000;j++)
       {
           if( fabs(pow(i,1.0/j)-(int)(pow(i,1.0/j)+1e-6))<1e-6 )
               s*=(int)(pow(i,1.0/j)+1e-6);
            if(pow(i,1.0/j)<1.9)break;
        }
        if(s==i)printf("%10d\n",i);
    }
    printf("\n");
}
结果为
        64
       729
10000内只有这两个数    64=8*4*2
                       729=27*9*3
第三个满足该条件的数是 15625=125*25*5
第四个满足该条件的数是 46656=216*36*6
.....................................
找到规律了么?
对于任意的n>1,只要n本身不是完全K次方(k为大于等于2的正整数),那么,n的6次方就是满足条件的数

[ 本帖最后由 jack10141 于 2010-8-14 17:48 编辑 ]

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 17:33
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
虽然我还是不大清楚误差是怎么造成的
不过楼上的
题目是求10000以内,不是1000以内哦
2010-08-14 17:42
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
以下是引用carmeloyin在2010-8-14 17:42:51的发言:

虽然我还是不大清楚误差是怎么造成的
不过楼上的
题目是求10000以内,不是1000以内哦
1000=》10000 这个问题改过了 呵呵 你可以拿我的程序验证下!

在处理这个问题中,你如果连误差怎么回事都不知道,我建议你就不要去做了,因为做的过程中,肯定想不到正确的解决办法的!

[ 本帖最后由 jack10141 于 2010-8-14 17:51 编辑 ]

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 17:49
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
看看下面的教材中的内容呵呵
由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。如下例。
【例3.6】实型数据的舍入误差。
main()
{float a,b;
 a=123456.789e5;
 b=a+20
printf("%f\n",a);
printf("%f\n",b);
}
 
注意:1.0/3*3的结果并不等于1。

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 17:56
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:1 
。。。

 

[ 本帖最后由 新浪 于 2010-8-15 13:53 编辑 ]

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2010-08-14 18:01
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 9楼 新浪
这个问题 用程序处理就要枚举,不用程序那就要逻辑推理和数学基础!呵呵!
所以找到规律了就好办!
对于任意的n>1,只要n本身不是完全K次方(k为大于等于2的正整数),那么,n的6次方就是满足条件的数

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 19:04
快速回复:一个数的次方解问题
数据加载中...
 
   



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

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