摘要:麦森数:形如2p-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数。2p-1不一定也是素数。代码一 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #include<cstring> 5 #define N 126 6 using namespace std; 7 int ans[N],anspow[N]; 8 void mult(int ans[],int anspow[]) 9 {10 int i,j;11 int c[N];12 memset(
阅读全文
摘要:思路: 见代码注释部分。 1 /*大数取余-------mod 为 (int范围)*/ 2 /* 具体做法: 3 从大数最高位开始,只要其大于mod 4 就实行取余,一直下去,最终得到余数 5 例如:123 % 4 取一个中间变量t=0 6 1<4 t=1 7 --- 2 t=1*10+2=12>4 t=t%4=0 8 --- 3 t=0+3=3 t=t%4=3 9 -------------------- 余数 310 */11 #include<iostream>12 #include<string>13 #inc...
阅读全文
摘要:题目:62进制(非大数除法实现) '0'-'9'-----0-9 A-Z-------10-35 a-z--------36-62具体说明可以参考此博客http://www.cppblog.com/kuangbin/archive/2011/08/25/154299.html?opt=admin在此简短说一下: 例如 10进制的18 转换为2进制 被除数 除数 商 余数 1 8 / 2---------09 0 ---------- 1轮结束9/2 -------- 4 1 --------- 2轮结束 4 / 2-------- 2 0 ---------3轮
阅读全文
摘要:思路:可以将几位数字存储在一个数组存储单元中。不只乘法,加法也可以压位。本次代码中压9位。 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define LL __int64 5 #define N 15000 6 #define M 50005 7 #define MOD 1000000000 //模 8 #define wei 9 //压的位数 9 using namespace std;10 11 LL a[N],b[N],ans[N];12 char c[M],d[M];1
阅读全文
摘要:思路:模拟手算的过程 1.高精度除以低精度 注意:低精度的范围(int) 1 /*高精度除低精度求商模板*/ 2 /*大数除法 ------除数为int范围*/ 3 #include<iostream> 4 #define N 1000 5 using namespace std; 6 void division(char * src,int n) 7 { 8 int len = strlen(src),i,k,t=0,s=0; 9 char dest[N];10 bool flag = true; //商是否有了第一个有效位,防止商首部一直出现0 11 ...
阅读全文
摘要:思路: 同大数加法,采用模拟笔算减法的策略,注意细节处理的问题。同样返回的为string类。代码如下: 1 /* 2 1.比较减数与被减数的长度,确定正负号 3 2.模拟笔算 4 (1)a[i]==b[j] 5 (2)a[i]<b[j] //退位 6 (3)a[i]>b[j] 7 */ 8 #include<iostream> 9 #include<string>10 using namespace std;11 string jianfa(string a,string b)12 {13 string c="",ans="&q
阅读全文
摘要:思路: 算法导论第30章有详细说明。此处只是简略说明其主要的步骤。一个知识点是: A(x)=a0+a1x+a2x2+a3x3+……+an-1xn-1A[0](x)=a0+a2x+a4x2+……+an-2xn/2-1A[1](x)=a1+a3x+a5x2+……+an-1xn/2-1A[0](x2)+x*A[1](x2)=A(x)以上是 二进制平摊反转置换跟求和的主要式子。多项式有两种表示形式:点值表示,系数表示。快速FFT主要有以下四点: 1. 使次数界(上界)增加一倍。A(x)、B(x)的长度扩充到2*n 2. 求值。主要是求点值表示A(x)、B(x)的点值表示 3. 点乘。C(x)=A(x)
阅读全文
摘要:思路: 数组模拟阶乘的过程,处理好进位的问题与优化的问题即可。代码一如下: 1 //大数阶乘 2 #include<iostream> 3 #include<cstring> 4 #define N 17000 //此处只能计算到5000,如有需要,可以修改N 5 using namespace std; 6 void jiecheng(int n); 7 int ans[N]; 8 int main() 9 {10 int n;11 while(cin>>n)12 {13 jiecheng(n);14 }15 return 0;16 }17 18 void
阅读全文
摘要:思路: 常见的方法有两种 1:用数组模拟,去掉小数点,采用整数的运算,最后处理细节问题。 2:利用各种等式及展开式求取,例如e,π 的值的任意精度。此处代码就略了。
阅读全文
摘要:思路: 大数乘法:同样是模拟的策略,将中一个拆成一位一位的去乘,再调用大数加法。同样返回的为string。代码如下: 1 #include<iostream> 2 #include<string> 3 using namespace std;//大数加法 4 string add(string a,string b) 5 { 6 int i=a.length()-1,j=b.length()-1; 7 int k=0,flag=0;//flag 进位的标志 8 string ans=""; 9 while(i>=0&&j>
阅读全文
摘要:思路: 用字符串模拟加法的原理即可,注意处理细节的问题。为了能够当成模版使用,返回的值处理为字符串。代码如下: 1 //大数加法--模版(string 实现) 2 #include<iostream> 3 #include<string> 4 using namespace std; 5 6 string add(string a,string b) 7 { 8 int i=a.length()-1,j=b.length()-1;//倒序相加 9 int k=0,flag=0;//flag 进位的标志10 string ans="";11 while
阅读全文
摘要:个人总结: 常见的大数问题涉及到以下几类:(正整数) 一、大数加法 地址链接:http://www.cnblogs.com/lsx54321/archive/2012/07/20/2601428.html 二、大数减法 地址链接:http://www.cnblogs.com/lsx54321/archive/2012/07/21/2602304.html三、大数乘法 地址链接:http://www.cnblogs.com/lsx54321/archive/2012/07/20/2601581.html 四、大数除法 地址链接:http://www.cnblogs.com/lsx54321/a.
阅读全文