摘要: //print calender#include <iostream>#include <iomanip>using namespace std;void printMonth(int year,int month);void printMonthTitle(int year,int month);void printMonthName(int month);void printMonthBody(int year,int month);int getStartDay(int year,int month);int getTotalNumberOfDays(int ye 阅读全文
posted @ 2011-04-21 00:40 wwwwwwwww11we 阅读(335) 评论(0) 推荐(0) 编辑
摘要: //To determine a number is prime or notint prime(int n){ if(n==1) return -1; if(n==2) return 1; else if(n%2==0) return 0; else{ for (int i=3;i<=sqrt(n);i+=2) if(n%i==0) return 0; return 1; }} 阅读全文
posted @ 2011-04-21 00:37 wwwwwwwww11we 阅读(146) 评论(0) 推荐(0) 编辑
摘要: #include <fstream>#include <cmath>#define MAX 8using namespace std;ofstream cout("out");int queens[MAX];int sum=0;void print();void placequeens(int i);bool isValid(int n);void print(){ for (int i=0;i<MAX;i++){ for (int j=0;j<MAX;j++){ if(j==queens[i]) cout<<"Q 阅读全文
posted @ 2011-04-21 00:35 wwwwwwwww11we 阅读(171) 评论(0) 推荐(0) 编辑
摘要: /******************* Base Transform *******************/#include <iostream>#include <cstring>#include <string>using namespace std;string str;int start[1000],ans[1000],res[1000];//被除数,商,余数//转换前后的进制int oldBase,newBase;int change(){//各个数位还原为数字形式 int len=str.length(); start[0]=len; for 阅读全文
posted @ 2011-04-21 00:32 wwwwwwwww11we 阅读(273) 评论(0) 推荐(1) 编辑
摘要: //print factorial#include <iostream>#include <cstring>using namespace std;const int maxn=3000;int main(){ int nCases; cin>>nCases; for(int i=1;i<=nCases;i++) { int fac[maxn]; int j,n; cin>>n; memset(fac,0,sizeof(fac)); fac[0]=1; for(i=2;i<=n;i++) { int c=0; for(j=0;j< 阅读全文
posted @ 2011-04-21 00:29 wwwwwwwww11we 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 来自http://blog.csdn.net/MasterLuo/archive/2009/09/21/4575412.aspx扩展的欧几里德算法是求如a * x + b * y = (a, b) 这样的整数解的,可以仿照欧几里德算法得出答案。程序如下:/***扩展的欧几里德算法a*x + b*y = Gcd(a,b)的一组整数解,结果存在x,y中***/void extend_gcd(long long a, long long b, long long& x, long long &y) { if(b == 0) { x = 1; y = 0; return; } exte 阅读全文
posted @ 2011-04-21 00:22 wwwwwwwww11we 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 转载自 http://www.cnblogs.com/Knuth/archive/2009/09/04/1559949.html好文章,整理收藏。1.费马小定理:有N为任意正整数,P为素数,且N不能被P整除(显然N和P互质),则有:N^P%P=N(即:N的P次方除以P的余数是N) 或 (N^(P-1))%P=1互相变形:原式可化为:(N^P-N)%P=0(N*(N^(P-1)-1))%P=0所以,N*(N^(P-1)-1)是N和P的公倍数又因为 N与P互质,而互质数的最小公倍数为它们的乘积所以一定存在正整数M使得等式成立:N*(N^(P-1)-1)=M*N*P所以N^(P-1)-1=M*P因为 阅读全文
posted @ 2011-04-21 00:17 wwwwwwwww11we 阅读(1015) 评论(0) 推荐(2) 编辑
摘要: 欧几里德算法(辗转相除法)是计算两个数最大公约数的传统算法,它无论从理论还是从效率上都是很好的。但是他有一个致命的缺陷,这个缺陷只有在大素数时才会显现出来。Stein算法由 J. Stein1961年提出,和欧几里德算法算法不同的是,Stein算法只有整数的移位和加减法。为了说明Stein算法的正确性,首先必须注意到以下结论:gcd(a,a) = a,也就是一个数和他自身的公约数是其自身gcd(ka,kb) = kgcd(a,b),也就是最大公约数运算和倍乘运算可以交换,特殊的,当k=2时,说明两个偶数的最大公约数必然能被2整除。有了上述规律就可以给出Stein算法如下:1.如果A=0,B是最 阅读全文
posted @ 2011-04-20 23:38 wwwwwwwww11we 阅读(580) 评论(0) 推荐(1) 编辑
摘要: #include <iostream>using namespace std;int com(int n,int r){ int i,j,s=1; if(n-r<r) r=n-r; for(i=0,j=1;i<r;i++){ s*=(n-i); while(j<=r && s%j==0){ s/=j; j++; } } return s;}int main(){ int n,m; while(cin>>n>>m){ cout<<com(n,m)<<endl; } return 0;}上面的代码只适合较 阅读全文
posted @ 2011-04-20 23:20 wwwwwwwww11we 阅读(1100) 评论(1) 推荐(1) 编辑
摘要: #include "MyTimer.h"#include <iostream>#include <cmath>using namespace std;unsigned int fib_1(unsigned int n){ if(n<=1) return n; return fib_1(n-1)+fib_1(n-2);}unsigned int fib_2(unsigned int n){ unsigned int f[100]; int i; memset(f,0,sizeof(unsigned int)); f[1]=f[2]=1; for( 阅读全文
posted @ 2011-04-20 22:49 wwwwwwwww11we 阅读(178) 评论(0) 推荐(0) 编辑
摘要: #include <iostream>#include "MyTimer.h"using namespace std;int pow(int n,int k){ if(k==0) return 1; if(k==1) return n; if(k&1) return pow(n*n,k/2)*n; return pow(n*n,k/2);}int power (int n, int k){//经实测,比pow快 int ret = n , a = ret; --k; while (k){ if (k & 1) ret = ret * a; a = 阅读全文
posted @ 2011-04-20 22:43 wwwwwwwww11we 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 因为平时经常要测试代码的执行效率,所以非常需要一个Timer. So,上网搜了下还真有 http://blog.sina.com.cn/s/blog_5fe506110100dgfd.html 在此感谢作者,自己修改了下,收藏。//精确计时类#ifndef __MyTimer_H__#define __MyTimer_H__#include <windows.h>class MyTimer{private: LARGE_INTEGER _freq; LARGE_INTEGER _begin; LARGE_INTEGER _end;public: double costTime; / 阅读全文
posted @ 2011-04-20 22:38 wwwwwwwww11we 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 矩阵乘法: [F(n+1)]=[1 1][F(n) ] [F(n) ]=[1 0][F(n-1)] 结果 F(n+1)=F(n)+F(n-1) F(n)=F(n) 设[ 1 1] [ 1 0]为A 则: F = A^n 所以Fib(n) = F[0][0] 之前不知道斐波那契数的矩阵求法,了解了以后觉得矩阵的时间复杂度和迭代应该一样啊。其实,矩阵连乘的真正威力在于求高效幂的算法。乘法方法有比加法更好的性质,用加法只能利用前两个的值,而乘法却不同,因为乘法有结合律,可以大幅度下降算法的耗时。因为方阵的乘法有结合律,所以A(2)^n=A(2)^(n/2)*A(2)^(n/2),不妨设n是偶数所以. 阅读全文
posted @ 2011-04-20 20:49 wwwwwwwww11we 阅读(337) 评论(2) 推荐(1) 编辑
摘要: 定义: A Mod B=A-(A div B) * B C++表示: a % b = a - b * (a / b)mod 与 & 的转换: x % 2n == x & (2n - 1) 例: (假设x是整数): x % 2 == x & 1 x % 4 == x & 3 x % 8 == x & 7 运算法则: (a + b) % p = (a % p + b % p) % p (a - b) % p = (a % p - b % p) % p (a * b) % p = (a % p * b % p) % p (a / b )% p = ((a % 阅读全文
posted @ 2011-04-20 19:52 wwwwwwwww11we 阅读(588) 评论(0) 推荐(0) 编辑