Math
2016-03-14 08:06
246 查看
以下是书上关于数学准备的一些知识,我只摘录了一小部分。
B、如果a*x ≡ b*y 和 a ≡ b 且如果 a⊥b (⊥表示互素) , 则 x ≡ y (mod m).
C、a ≡ b (mod m) 当且仅当 a*n ≡ b*n (mod n) 当n != 0时。
D、如果 r⊥s, 则a ≡ b (mod r*s) 当且仅当 a ≡ b (mod r).
E、费马定理:如果 p 是素数,则对于所有整数 a, a^p ≡ a (mod m).
(暂时没有编程实现)
求解对数
(此部分理解的并不是很好)
1)计算Log1(b,X,k)(以b为底,变量取x时的,精确到小数点后k位的值)并用二进制表示
Log1(b,X,k)=n+b1/2+b2/4+b3/8+...+bk/(2^k);
L1:[ Initialize. ] n <- X/b;
L2:[ Text for end. ] If k = 0, end.
L3:[ Shift the decimal point of X. ] bk <- 0, Xk = Xk-1*Xk-1, if Xk-1*Xk-1<10;
bk<-1, Xk = (Xk-1*Xk-1)/10, if Xk-1*Xk-1 >= 10.
k--, goto L2.||
但是由于计算限制,会产生精度误差。
2)We have a binary computer and a number x, 1 <= x <2, and need an auxiliary table of the constants logb2, logb(4/3), logb(8/7), etc, to many values errors, as number of the computer.
L1:[ Initialize. ] Set y <- 0, z<- x shift right 1, k <- 1;
L2:[ Text for end. ] If x= 1, stop.
L3:[ Compare. ] If x - z < 1,set z <- z shift right 1, k<-k+1, and repeat this step.
L4:[ Reduce values. ] Set x <- x - z, z <- x shifted right k, y <- y+logb(2^k/(2^k-1)), and go to L2.||
(这段描述并不是很理解,代码实现可能要延迟)
由于本人数学功力不深,若有误解,希望指出;若有更好的代码实现方式,欢迎交流。
求和
1)一下两种求和方式是等价的:int sum1(int a[],int n) { int sum=0; for(int i=0;i<n;++i) { for(int j=0;j<=i;++j) { sum+=a[i]*a[j]; } } return sum; }
int sum2(int a[],int n) { int sum1=0,sum2=0; for(int i=0;i<n;++i) { sum1+=a[i]; sum2+=a[i]*a[i]; } sum1*=sum1; sum1+=sum2; return sum1/2; }2)两种方式求几何级数:
int sum1_of_GS(int a,int x,int n) { int sum=1,tmp=x; for(int i=1;i<n;++i) { sum+=x; x*=tmp; } return sum*a; }
int sum2_of_GS(int a,int x,int n) { int tmp=x; for(int i=1;i<n;++i) { x*=tmp; } return (1-x)/(1-tmp)*a; }3)两种方式求几何级数:
int sum1_of_AP(int a,int b,int n) { int sum=0; do { sum=sum+a+n*b; }while(n--); return sum; }
int sum2_of_AP(int a,int b,int n) { return (a+b*n/2)*(n+1); }个人认为:计算机更喜欢计算循环次数少以及乘法次数少的程序。再优化程序时可以从降低循环次数以及减少乘法次数上入手。
数论
A、如果a ≡ b 和 x ≡ y,则a+x ≡ b+y , 且 a*x ≡ b*y (mod m).B、如果a*x ≡ b*y 和 a ≡ b 且如果 a⊥b (⊥表示互素) , 则 x ≡ y (mod m).
C、a ≡ b (mod m) 当且仅当 a*n ≡ b*n (mod n) 当n != 0时。
D、如果 r⊥s, 则a ≡ b (mod r*s) 当且仅当 a ≡ b (mod r).
E、费马定理:如果 p 是素数,则对于所有整数 a, a^p ≡ a (mod m).
(暂时没有编程实现)
求解对数
(此部分理解的并不是很好)1)计算Log1(b,X,k)(以b为底,变量取x时的,精确到小数点后k位的值)并用二进制表示
Log1(b,X,k)=n+b1/2+b2/4+b3/8+...+bk/(2^k);
L1:[ Initialize. ] n <- X/b;
L2:[ Text for end. ] If k = 0, end.
L3:[ Shift the decimal point of X. ] bk <- 0, Xk = Xk-1*Xk-1, if Xk-1*Xk-1<10;
bk<-1, Xk = (Xk-1*Xk-1)/10, if Xk-1*Xk-1 >= 10.
k--, goto L2.||
但是由于计算限制,会产生精度误差。
string Log1(double b,double x,int k) { string ans; int n=(int)x/b; ans.append(1,(char)x/b+'0'); ans+="."; x=x-n; while(k--) { x*=x; if(x<10) { ans.append(1,'0'); } else { ans.append(1,'1'); x/=10; } } return ans; }
2)We have a binary computer and a number x, 1 <= x <2, and need an auxiliary table of the constants logb2, logb(4/3), logb(8/7), etc, to many values errors, as number of the computer.
L1:[ Initialize. ] Set y <- 0, z<- x shift right 1, k <- 1;
L2:[ Text for end. ] If x= 1, stop.
L3:[ Compare. ] If x - z < 1,set z <- z shift right 1, k<-k+1, and repeat this step.
L4:[ Reduce values. ] Set x <- x - z, z <- x shifted right k, y <- y+logb(2^k/(2^k-1)), and go to L2.||
(这段描述并不是很理解,代码实现可能要延迟)
由于本人数学功力不深,若有误解,希望指出;若有更好的代码实现方式,欢迎交流。
相关文章推荐
- 蔬菜
- 算法
- vim技巧6
- 上周热点回顾(3.7-3.13)
- 【解决】hive动态添加partitions不能超过100的问题
- 安装64位的oracle数据库, 使用自带的sqldeveloper
- Linux 内核消息两则: 4.5 发布,历史最悠久的 LTS 内核 2.6.32 终止支持
- SQL Server安全(2/11):身份验证(Authentication)
- 【J2EE】:MVC是框架?是设计模式?是架构?还是……
- 软工大作业·源物语(二)
- 101. Symmetric Tree
- win7精选壁纸一键静默安装包v1.0
- Spark源码分析之八:Task运行(二)
- 紫色范冰冰WIN7主题包
- 软工大作业·源物语(二)
- java线程(上)Thread和Runnable的区别
- Spark源码分析之四:Stage提交
- HDFS HA、YARN HA、Zookeeper、HBase HA、Mysql、Hive、Sqool、Flume-ng、storm、kafka、redis、mongodb、spark安装
- Mozilla 在 Firefox 46.0 中再次拿 GTK3 集成来挑逗 Linux 用户们
- Spark源码分析之三:Stage划分