- 浏览: 914992 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
通常会有如下问法:
有两个数,A和B,A的范围较小,B的范围较大。问A的B次幂的最后n位是多少? n一般都小于5.
或
有两个数,A和B,他们的范围都很大。问A的B次幂的最后n位是多少?
该题目主要思路是A的B次幂最后求余即可。但是A和B要不一个很大,要不都很大,是很难求到的。
都用到了数学里的同余数的概念。
同余数概念如下:
采用同余的习惯写法,对三个整数a,b,p, p>0
a=b (mod p) (其实等式应该是三横,我没有找到HTML的表示方法)
表示a%p=b%p. 同余有个很好的基本性质: 支持加法和乘法. 即:
若 a=b (mod p), c=d (mod p), 则有
a+c=b+d (mod p), a*c=b*d (mod p)
因此, 若a=b(mod p), 则对任意自然数n, 有
a^n=b^n (mod p)
上式可以帮助解决楼主的问题(求a^n除以p的余数): 若a是个很大的数,我们先求出它除以p的余数b,然后计算b^n除以p的余数就行了.
但是,如果n也很大, 计算b^n的工作量还是不小. 受启于同余式中的Euler定理, 我们可有如下作法:
考虑b,b^2,b^3,...b^n,...这些数除以p的余数得到的数列S,S(有无穷项)中每一项都是0到p-1之间的某一个数.因此,一定有不相等的两个数m,n使得
S[m]=S[n]
注意只要S[m]=S[n], 就一定有S[m+1]=S[n+1], S[m+2]=S[n+2], ... s[m+k]=S[n+k], ...
因此, 数列S实际上是循环的,并且循环的周期小于等于p, 因此用程序可很快算出其周期.
----------------------------------------------------------------------
取模的方法有一点a^(2^n)%c=(a^2%c)^(2^(n-1))%c
#include <iostream> using namespace std; long PowerMod(long a, long b, int k) { long tmp = a, ret = 1; while (b) { if (b & 1) ret = ret * tmp % k; tmp = tmp * tmp % k; b >>= 1; } return ret; } int main() { long a; long b; int i,N; cin>>N; for(i=0;i<N;i++) { cin>>a>>b; cout<<PowerMod(a,b,9907)<<endl; } return 0; }
求最后几位,如最后四位,只要模10000就行了。
要算一共有多少位,可以求log10(a^b)=blog10(a)(小数进位),例如5^10
有10*log10(5)=6.98,进位得7。
【解释】
zz: http://blog.csdn.net/shuqin1984/article/details/6543677
整数的二进制分解
将大整数 power 按照二进制进行分解:
power = b[N] * 2^N + b[N-1] * 2^(N-1) + … + b[1] * 2 + b[0]
其中: b[i] 取值为 0 或 1 ( i=0,1,.., N),则
a^power = a^(b[N] * 2^N) * a^(b[N-1] * 2^(N-1)) * … * a^(b[1] * 2) * a^b[0]
很显然:
(1) 若 b[i] = 0, 则 b[i] * 2^i = 0 , a^(b[i]*2^i) = 1, 该乘积项可以消去;
(2) 若 a[i] = 1, 则 b[i] * 2^i = 2^i , a^(2^i) % m = (a^(2^(i-1)) % m)^2 % m.
令 temp = a^(2^(i-1)) % m , 则 a^(2^i) % m = (temp * temp) % m。
比如, power = 26 = 16 + 8 + 2 = (11010)2, 则 a^26 = a^(2^4 + 2^3 + 2^1);
计算 a^power 实际上是计算 power 的二进制表示中所有位为1对应的乘积项。
(a^26) % m = ((a^16 %m) * (a^8 %m) * (a^2 % m)) %m
而, a^8 % m = ((a^4 %m) × (a^4%m)) % m 是可以用动态规划法逐次求解的。 简单起见, 将 (a^i) % m 称为 “取模乘积项”。
算法描述:
令 temp = a^(2^i) % m , i 是 power 的当前二进制位所对应的位置,
temp 表示 power 的当前二进制位所对应的(取模)乘积项
STEP1: 初始化 temp 为 a % m , result = 1;
STEP2: 对 power 进 行二进制分解。 若 power >=1 , 则进行模2运算:否则转至 STEP3
[1] 若余数为1, 则该位置上的二进制为1, 乘积中需要加入此时的 temp 项 : result = (result * temp) % m;
下一个二进制位对应的乘积项为 temp = (temp * temp) % m
[2] 若余数为0, 则该位置上的二进制为0,乘积中不需要加入 temp 项, result 保持不变,
下一个二进制位对应的乘积项为 temp = (temp * temp) % m
STEP3: 所有的二进制位对应的乘积项都已计算,算法结束。
比如, result = (3^26) % 5 的计算过程如下:26 = (11010)2 ; (1)初始化: temp = 3^1 % 5 = 3;, result = 1 ; (2) 检测 26 的最低位二进制为0, 则 不加入乘积项,result = 1, temp =(3^2) % 5 = (temp * temp) % 5 = 4 (3) 检测 26 的次低位二进制为1, 则 加入乘积项, result = (result * temp) % 3 = 4 , temp = (3^4) % 5 = (4*4) % 5 = 1; (4) 检测 26 的次低位二进制为0, 则 不加入乘积项, result = 4, temp = (3^8) % 5 = (1*1) % 5 = 1; (5) 检测 26 的次低位二进制为1, 则 加入乘积项, result = (result * temp) % 5 = 4, temp = (3^16) % 5 = 1; (6) 检测 26 的次低位二进制为1, 则 加入乘积项, result = (result * temp) % 5 = 4, temp = (3^32) % 5 = 1. 由于所有位都检测完毕, 故 3^26 % 5 = 4. 由上可知, 3^26 % 5 = ((3^16) % 5)) * ((3^8) % 5) * ((3^2) % 5) % 5. 其中 3^16 % 5, 3^8 % 5, 3^2 % 5 是通过动态规划法逐渐求得的。
发表评论
-
不使用/,%,+和*,如何判断一个数能否被3整除
2012-05-30 14:28 1788如果n的二进制末位为0,那么n和n>>1同时被 ... -
一些数学知识
2012-03-31 20:12 858zz:http://hi.baidu.com/imak ... -
从N个变量中找出一个错误变量的方法
2012-03-31 12:17 863假设有N包咖啡,里面有一包咖啡是掺和了沙子的,可以将咖啡放到水 ... -
【转】大数据量算法
2012-03-06 16:11 1249第一部分、十五道海量数据处理面试题 1. 给定a、b两个 ... -
链表的一些常见笔试面试问题总结及代码
2010-10-27 13:39 1095先什么也不说,假设链 ... -
Trie Tree
2010-10-26 11:34 1478给你100000个长 ... -
字典树(trie tree)
2010-10-26 11:19 1391今天AC了两题tri ... -
高度为n的平衡二叉树最少需要多少个节点
2010-10-24 13:42 9445递推关系 A(1)=1 A(2)=2 A ... -
如何判断两个单向链表是否有相交,并找出交点
2010-10-24 13:37 1708题比较简单,单向链表有交点意思就是交点后的节点都是 ... -
大数据排序或取重或去重相关问题解决方案
2010-10-21 16:13 2778Q:TC群里有人发消息说在10亿个数据中找出所有的重复数,内存 ... -
分配排序(桶排序..)
2010-10-21 13:39 1888分配排序的基本思想:排序过程无须比较关键字,而是通过&qu ... -
Rete(3)
2010-10-21 09:59 9794.6 连接节点(Join node) ... -
Rete(2)
2010-10-21 09:57 1183使用RETE算法的模块系统 ... -
Rete(1)
2010-10-21 09:53 1065一、 rete概述Rete算法是一种前向规则快速匹配算法,其匹 ... -
[转]海量数据处理面试题
2010-10-20 15:15 10311. 给定a、b两个文件,各存放50亿个url,每个url各占 ... -
用JDBC实现数据的分页
2010-10-20 11:23 1229数据分页主要用到了resultSet的absolute()方法 ... -
如何求N的阶乘所得的数字末尾含有多少个0
2010-10-19 13:13 2190原题是这样: 给定 ... -
数据库笔试题(经典SELECT语句用法)
2010-10-18 22:49 2117问题描述: 为管理岗位业务培训信息,建立3个表: S ... -
Java分页实现
2010-10-18 22:11 1510Java代码 public interf ... -
Linux下大文件的排序和去重复
2010-10-15 10:02 2137Linux下我们用 sort 与 uniq 的命令来实现去重复 ...
相关推荐
此外,文章中还提到了幻方的变换、构造完美幻方的方法、构成高次幂幻方的简捷方法以及多维幻方的通解公式。这些内容为我们提供了深入研究幻方构造的多种途径和方法。 通过这些构造方法的学习和掌握,可以帮助我们更...
高阶导数公式——莱布尼兹(Leibniz)公式:中值定理与导数应用:曲率" 高等数学是数学的一个重要分支,涉及到微积分、矢量分析、函数论等多个方面。以下是从给定的文件中提取的知识点: 1. 高等数学公式导数公式...
泰勒公式的基本思想是将函数在某一点附近的局部行为通过幂级数来近似,这对于理解和解决高阶微积分问题至关重要。 泰勒公式有两种常见的形式,一种带有拉格朗日型余项,另一种带有佩亚诺型余项。拉格朗日型余项Rn(x...
2. 拉格朗日余项:泰勒级数通常不能完全展开一个函数,因此存在一个余项,拉格朗日余项用来描述未被级数包含的部分,其形式为 \( R_n = \frac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1} \),其中 \( \xi \) 在a与x之间。 ...
为了应对高阶行列式的计算,文章介绍了几种常用方法: 1. **化为三角形法**:通过行或列的初等变换,将行列式转化为上三角形或下三角形,这样行列式的值就是主对角线上元素的乘积。如果非零元素位于副对角线,那么...
利用初等方法研究了正切函数的幂级数表示与Genocchi数及高阶Genocchi...通过正切函数的幂级数展开以及比较系数的方法,揭示了其系数与Genocchi数及高阶Genocchi数的关系,并由此得到了关于Genocchi数的几个有趣的同余式.
这个公式能够将函数展开成幂级数,从而简化计算过程,尤其是在处理高阶导数和极限问题时。泰勒公式的形式通常包括一个主项和一个余项,余项用来描述近似值与真实值之间的偏差。 泰勒公式的基本形式是: \[ f(x) = ...
7. 高阶插值与余项分析:对于有较高阶导数的函数,可以构造更低次数的插值多项式。本题中,构建了满足特定条件的三次埃尔米特插值多项式,并通过分析余项的结构,展示了余项表达式的推导过程。 这些解答涵盖了数值...
公式中的n阶导数反映了函数在该点附近的信息,n越大,展开的精度越高。 在实际应用中,泰勒公式可以用于: 1. **误差分析**:通过泰勒公式,我们可以估计近似计算中的误差大小。例如,在数值积分中,将被积函数...
当数据呈现非线性趋势时,可以使用更高阶的多项式进行拟合。多项式回归通过构建高次多项式函数来近似数据,例如二次、三次或更高次。MATLAB中的`polyfit`函数也适用于多项式拟合,只需改变第三个参数为所需的多项式...
2. **矩阵特征值计算**:计算矩阵按模最大特征值的方法是幂法,对于按模最小特征值,使用反幂法。实对称矩阵的全部特征值可以通过Jacobi方法求得,这是一种迭代方法,用于找到矩阵的所有特征值。 3. **Lagrange插值...
综合题部分涉及到多项式拟合、求积公式的代数精度计算、Newton法求解方程根、矩阵直接三角分解、数值积分法解初值问题以及幂法求特征值等实际应用。 证明题部分通常涉及收敛性证明,例如证明迭代格式对特定函数的...
5. **高阶导数**:了解二阶导数的表示及其求法,以及更高阶导数的概念。 **三、微分的求法** 1. 微分是导数乘以dx的结果,求微分首先要求导数。 **四、二元函数的微分学** 1. **多元函数**:理解多元函数的定义,...
基本的积分公式包括幂函数、指数函数、对数函数、三角函数的积分,以及积分的线性性质和换元积分法。定积分则用于计算面积、弧长、体积等,其基本定理连接了微分与积分,是微积分学的基石。 2. **微积分**:微积分...
- 高阶方程求根:利用数值方法求解高阶方程的根。 - 快速傅里叶变换:用于快速计算多项式的乘法和离散傅里叶变换。 8. 进制转换和格雷码:用于在不同进制之间转换数据和处理格雷码。 ACM数学模板中的每一个知识...
综上所述,“nizhen.rar_矩阵求逆”这个压缩包提供了一种用C语言实现的矩阵求逆方法,利用代数余子式,这对于理解矩阵运算和编程实践具有很高的价值。通过学习和理解这段代码,开发者可以更好地掌握矩阵理论及其在...
三、高阶导数的运算法则则涉及到更高阶的导数计算,例如二阶导数、三阶导数等,对于某些特定函数,这些高阶导数有着简洁的表达式。 四、基本初等函数的n阶导数公式提供了求任意阶导数的方法,这对于分析函数的性质...
拉格朗日型余项则描述了麦克劳林公式中未被包含的高阶导数对函数的影响。例如,对于函数f(x) = tan x,要求求出带有拉格朗日型余项的3阶麦克劳林公式。这里需要计算tan x在x=0处的导数值,并根据麦克劳林公式构造3阶...
3 高阶微分方程 习题 一些习题的答案 名词索引 记号索引 丛书信息 法兰西数学精品译丛 (共17册), 这套丛书还有 《线性与非线性泛函分析及其应用(上)/法兰西数学精品译丛》,《拓扑学教程》,《拟微分算子和Nash-...