这次花点时间做了一下几个简单的模板,或许以后还会有新的模板!
1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 5 typedef long long ll; 6 const ll MAX = 0xffffffff; 7 8 // 辗转相除法的一般写法 9 int gcd1(int a, int b) 10 { 11 int t = 0; 12 while(a%b != 0) 13 { 14 t = b; 15 b = a%b; 16 a = t; 17 } 18 return b; 19 } 20 21 // 辗转相除法的递归写法 22 int gcd(int a, int b) 23 { 24 if(a%b == 0) 25 return b; 26 else 27 return gcd(b, a%b); 28 } 29 30 // 更相减损法 31 int gcd2(int a, int b) 32 { 33 while(a != b) 34 { 35 if(a > b) 36 a -= b; 37 else 38 b -= a; 39 } 40 return a; 41 } 42 43 /* 44 * 素数的筛选的一般优化方法 45 * 除非出题人失了智,这种优化一般来讲可以通过了 46 * 筛选 n 内的所有素数 47 */ 48 void getPrime(int n) 49 { 50 bool p[0xfffff]; // 默认为false, 测试了一下,这个大小可以通过 51 for(ll i=2;i<n;i++) 52 if(i%2 != 0) p[i] = true; 53 for(ll i=3;i<=sqrt(n);i+=2){ 54 if(p[i]){ 55 for(ll j=i+i;j<=n;j+=i) 56 p[j] = false; 57 } 58 } 59 for(ll i=2;i<n;i++) 60 if(p[i]) 61 cout<<i<<" "; 62 cout<<endl; 63 } 64 int main() 65 { 66 int a, b; 67 cin>>a>>b; 68 69 cout<<"最大公约数:"<<gcd2(a, b)<<endl; 70 71 cout<<"最小公倍数:"<<(a*b)/gcd(a, b)<<endl; 72 // 100以内的所有素数 73 getPrime(100); 74 return 0; 75 }
2019-01-13
16:53:19
原文地址:https://www.cnblogs.com/mabeyTang/p/10263249.html
时间: 2024-10-08 13:40:23