虚心请教一个数学问题

jp1984 2005-05-14 06:48:45
1)求666^666的最后十位数
2)求666!^666!的最后十位数

我想解决了1)则可以解决2) .对于666!可对其展开成 素数的幂乘形式.
这个问题我零星的想了有一个礼拜.得到了各种各样的思路,但是都没有办法进行下去.
最有希望开展下去的思路是. 如何找到 x(mod a),和 x(mod a^n) n>=1 之间的关系.
本题编程可能比较容易实现 .对大指数的幂,可把幂化为2进制来解决。

请教各位同志,怎么解决这个问题呢?
...全文
240 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
jp1984 2005-05-17
  • 打赏
  • 举报
回复
50!最后十位为零为什么666!^666!就是零?
好笨!请指教!
GetTheWorld 2005-05-17
  • 打赏
  • 举报
回复
hoho jp1984笨笨了
blue_sky007 2005-05-17
  • 打赏
  • 举报
回复
所以遇到0结尾的自然就保留下来.因此,对于666!^666!的末尾的0有很多很多!
blue_sky007 2005-05-17
  • 打赏
  • 举报
回复
to:jp1984,末尾是0的数字乘以其他任何数字末尾的0都不会丢失的.
mathe 2005-05-16
  • 打赏
  • 举报
回复
666!^666!最后10位显然都是0
666^666做模10计算就可以了
aheadyes 2005-05-16
  • 打赏
  • 举报
回复
看来这些数字真的是楼主凭空出来的:)
大家都把焦点放在第一题,而乎略了第2题。
还是mathe心细!
50! 最后10位 肯定是0了,
何况666!^666!
jp1984 2005-05-16
  • 打赏
  • 举报
回复
为什么666!^666!最后十位都是0啊?
hanweizhouricher 2005-05-16
  • 打赏
  • 举报
回复
顶一下
jp1984 2005-05-15
  • 打赏
  • 举报
回复
to dext,
查了一下,java中long型确实支持超过十三位的数,挺好的。但是其实你做的还是错了。自己去发现错误吧.

to mysword,
为什么要不断的模10^10?求的只最后的十位数啊.

其实本题的初忠只是纯粹的数学推导,没想到各位都是借助计算机来解决。期待后来者.
gnefuil 2005-05-15
  • 打赏
  • 举报
回复
c不支持13位以上?搞笑啊
现在主流c编译器都是支持long long的吧,64位二进制,也就是20位10进制

我觉得要先搞清楚,要问的问题是对某个特殊数值比如666,还是对一般性问题求解,比如就是求n^n的后多少多少位
其次,你希望的解答是数学解答还是计算机解答?两者的思考方式是不一样的
GetTheWorld 2005-05-15
  • 打赏
  • 举报
回复
大家讨论不要有火药味嘛
aheadyes 2005-05-15
  • 打赏
  • 举报
回复
呵呵,我的数学菜得不行,继续关注。。。
算法版,有很多数学牛人,学习!
jp1984 2005-05-15
  • 打赏
  • 举报
回复
to aheadyes
是mysword的话有歧义,他的意思可以理解成对666^666的最后结果不断取模10^10.后面的我又没看 :p
呵呵.当是如果按照这种方法,对不支持13位以上的数的类型的语言.比如C,则还是要用到高精度.这里是算法版,不需要太注重实现的问题.我只是想弄清楚其中的数学的规律而已.
我想你是没有认真分析而已 6有很多优良的性质 6 = 1+2+3. 而且对大整数的幂运算来说,里面也有很多可用的定理.如Fermat定理和Euler定理.而对2)问则除了利用n!的标准素数展开外,可能还会用到wilson定理.老实说,本身这题就是个数学题,是出自一本数学趣题的.
我想你还是认真的做做再发言比较稳重.
gnefuil 2005-05-15
  • 打赏
  • 举报
回复
不断的模10^10

a^n mod m = ((((a mod m)*a mod m)*a mod m)...mod m)
dext 2005-05-15
  • 打赏
  • 举报
回复
第一个问题的代码

public class GetMod {
public static void main(String[] args) {
long s = 1;
for (int i = 0; i < 666; i++) {
s *= 666;
s %= 10000000000L;
}
System.out.println("s = " + s);
}
}
beepbug 2005-05-15
  • 打赏
  • 举报
回复
如果你的编译器支持long long int类型,即可以存放10位数,那很容易解决666^666。我只说一个算法:你每乘一次666,就把积对10^10求模余,即只剩下低10位数。任何一位数学教师都会告诉你,扔掉的东西对最后的积是没用的。
aheadyes 2005-05-15
  • 打赏
  • 举报
回复
bxyqt(碧血银枪) 和 dext(德克斯特) 的代码;
就是 mysword 的实现啊。

这种题有纯粹的数学推导吗?
一开始还以为楼主要的是,根据666^666的某种性质:一步就能推出来的公式. 我数学菜没能看出来)


为什么要不断的模10^10?求的只最后的十位数啊.?
因为你要求的是最后10位啊,所以最后跟结果有关的肯定是最后10位
取模就去掉无关的位。这样不断相乘后取模,最后就为所求的结果。
bxyqt 2005-05-15
  • 打赏
  • 举报
回复

step1:s=1,k=0
step2:s=s*666,k=k+1
step3:if s>10^10 转换S为字符,取后10位,再将s转换为数字。
step4:if k<=666,转step2。
最后的结果S就是你所求的值。
gnefuil 2005-05-15
  • 打赏
  • 举报
回复
模10^10不就是求最后10位数么?
下面不是写了数学推导了嘛?
jp1984 2005-05-14
  • 打赏
  • 举报
回复
数学方法解决,很明显这是个数论上的题目, 只要求得 666^666(mod 10^10)就行了,但是如何求的结果是个困难的事情..
加载更多回复(2)

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧