本人第一次开始在博客上写关于算法的总结:(如有更好的解法,希望大家不吝指教。)
1.欧几里德算法(两个数)
(1)取余
#include <iostream> using namespace std; int gcd(int a,int b) { int r=a%b; while (r!=0) { a=b; b=r; r=a%b; } return b; } int main() { int a,b; while(cin >> a >> b) { cout << gcd(a,b) << endl; cout << a/gcd(a,b)*b << endl; } return 0; }
(2)减法
#include <iostream> using namespace std; int gcd(int a,int b) { while (a!=b) { if (a>b) a=a-b; else b=b-a; } return a; } int main() { int a,b; while(cin >> a >> b) { cout << gcd(a,b) << endl; cout << a/gcd(a,b)*b << endl; } return 0; }
2.最简版
int gcd(int a,int b) { return b?gcd(b,a%b):a; }
3.n个数最大公约数的求法
#include <iostream> using namespace std; int gcd(int a,int b) { while (a!=b) { if (a>b) a=a-b; else b=b-a; } return a; } int main() { int a,b; int n,t; cin >> n; cin >> a >> b; a=gcd(a,b); n=n-2; while(n--) { cin >> t; a=gcd(t,a); } cout << a << endl; return 0; }
以后我还会多多总结算法,加油。