LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4353|回复: 37

[算法]从 CU 抄过来的数学题一个。

[复制链接]
发表于 2005-12-21 12:24:04 | 显示全部楼层 |阅读模式
编写一个程序计算 3 ^ 1000 mod 7 的值。语言不限。
发表于 2005-12-21 12:45:10 | 显示全部楼层
3^6=1 (mod 7)
so, 3^(1000)=3^(1000%6)=3^4=81=4 (mod 7)
回复 支持 反对

使用道具 举报

发表于 2005-12-21 12:46:24 | 显示全部楼层

  1. main()
  2. {
  3.   int n = 0;
  4.   long result = 0;
  5.   
  6.   result = 3*3;
  7.   for(;n<1000;n++){
  8.     result =* 3;
  9.   }
  10.   while(result >= 7){
  11.     result =- 7;
  12.   }

  13.   printf("Value is %d \n", result);
  14. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-12-21 15:17:08 | 显示全部楼层
>>> a=3**1000%7
>>> a
4
回复 支持 反对

使用道具 举报

发表于 2005-12-21 15:46:58 | 显示全部楼层

  1. ~ $  calc
  2. C-style arbitrary precision calculator (version 2.11.5t4.5)
  3. Calc is open software. For license details type:  help copyright
  4. [Type "exit" to exit, or "help" for help.]

  5. > 3^1000%7
  6.         4
  7. >
复制代码

还是我的代码比较精简啊
回复 支持 反对

使用道具 举报

发表于 2005-12-21 16:26:47 | 显示全部楼层
就这题来说, 二楼的最好....
但如果3换成n, 1000换成m,
要在O(log(m))内解决的...
4楼和5楼的复杂度是多少?

PS:不妨求第200000000个fib数mod 89999931的值吧
回复 支持 反对

使用道具 举报

发表于 2005-12-21 16:46:38 | 显示全部楼层
好孩子,多来这里发些东西.我没上过学,不懂这些东西得.可以随便蒙.蒙好了给你加精!
回复 支持 反对

使用道具 举报

发表于 2005-12-21 19:17:27 | 显示全部楼层
Post by arxor

PS:不妨求第200000000个fib数mod 89999931的值吧


一个线性模数列肯定是周期的(这不一定纯)
而89999931= 3*7*293*14627
所以只要求其模这些数的值.
回复 支持 反对

使用道具 举报

发表于 2005-12-21 22:24:33 | 显示全部楼层
这个方法...^_^如果是大质数呢?
而且m可以大到 2^63 - 1
Post by pointer
一个线性模数列肯定是周期的(这不一定纯)
而89999931= 3*7*293*14627
所以只要求其模这些数的值.
回复 支持 反对

使用道具 举报

发表于 2005-12-22 11:19:26 | 显示全部楼层
这个方法...^_^如果是大质数呢?
而且m可以大到 2^63 - 1
我没有好办法.

一个方法是对F_n的n分解成2进制表示,这样大约只需要求O(log_2(n))次.

另一个一半的方法是对5是其二次剩余的质数p(50%的), 可以在Z_p里解\sqrt(5), 这样
将F_n的通项公式化成Z_p里的两个整数幂和. 整数幂对一个质数的模好求一些.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表