ACM学习历程20——竞赛中的简单数学问题之最大公约数、素数表、排列组合数
来源:互联网 发布:云计算hadoop基础考题 编辑:程序博客网 时间:2024/05/28 23:09
一、求解最大公约数和最小公倍数
#include<iostream>using namespace std;int main(){int a,b,t;cin>>a>>b;t=a>b?a:b;for(;t>=1;t--){if(a%t==0 && b%t==0)break;}cout<<"The greatest common divisor:"<<t<<endl;cout<<"The least common multiple:"<<a*b/t<<endl;return 0;}测试:6 4The greatest common divisor:2The least common multiple:12这种方式是选择a和b中较大的数作为可能的最大公约数并赋值给t,若a和b能同时被t整除则t即为最大的公约数,但是这种方法的缺点也是明显的,例如:a为9999,b为1,那么t要从9999一直递减到1,,才能得到最大的公约数1,改进如下:
#include<iostream>using namespace std;int main(){int a,b,t;int x,y;cin>>a>>b;x=a;y=b;if(a<b){t=a;a=b;b=t;}while(b!=0){t=a%b;a=b;b=t;}cout<<"The greatest common divisor:"<<a<<endl;cout<<"The least common multiple:"<<x*y/a<<endl;return 0;}测试:60 24The greatest common divisor:12The least common multiple:120
二、素数判断:
#include<iostream>#include<cmath>using namespace std;bool Prime(int x){int i;for(i=2;i<=sqrt(x);i++)if(x%i==0)return false;return true;}int main(){int x;while(cin>>x){if(x<=1)cout<<"error"<<endl;else{bool flag=Prime(x);if(flag)cout<<x<<" is prime"<<endl;elsecout<<x<<" not prime"<<endl;}}return 0;}对于要进行大量素数判断的情况可以先建立一张素数表:
#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int N=1000;bool prime[N];void initPrime(){//若为素数返回true,反之为falsefill(prime+2,prime+N,true);for(int i=2;i<N;i++){if(prime[i]){for(int j=i+i;j<N;j+=i)prime[j]=false;}}}int main(){int x; initPrime();while(cin>>x){if(x<=1)cout<<"error"<<endl;else{if(prime[x])cout<<x<<" is prime"<<endl;elsecout<<x<<" not prime"<<endl;}}return 0;}求组合数:从N个元素中选择M个元素,求解组合数:
#include<iostream>#include<algorithm>#include<cmath>using namespace std;int combination(int m,int n){int i,ans=1;for(i=1;i<=m;i++){ans=ans*n;n--;}for(i=2;i<=m;i++)ans=ans/i;return ans;}int main(){ int m,n;while(cin>>m>>n){cout<<combination(m,n)<<endl;}return 0;}求排列数:从N个元素中选择M个元素进行全排列:
#include<iostream>#include<algorithm>#include<cmath>using namespace std;int permutation(int m,int n){int i,ans=1;for(i=1;i<=m;i++){ans=ans*n;n--;}return ans;}int main(){ int m,n;while(cin>>m>>n){cout<<permutation(m,n)<<endl;}return 0;}
0 0
- ACM学习历程20——竞赛中的简单数学问题之最大公约数、素数表、排列组合数
- ACM学习历程21——各种排列组合问题
- ACM学习笔记之 数学问题----素数
- ACM学习历程16——List链表的应用之简单约瑟夫问题
- ACM学习-数字排列组合问题
- ACM学习历程23——最小周期串问题
- ACM内部函数--数学问题--最大公约数最小公倍数
- acm竞赛中数学期望问题
- ACM-简单题之寻找素数对——hdu1262
- ACM 进阶学习第一课----简单数学问题之同余相关(1)
- ACM 进阶学习第一课----简单数学问题之同余相关
- 洛谷 1029——最大公约数和最小公倍数问题(简单的数学问题)
- ACM学习总结之素数与串问题
- 数学中的排列组合
- 算法竞赛中的数学问题和结论
- 数学问题——求回文素数
- ACM练习—素数距离问题
- 入门级算法——最大公约数 最小公倍数 快速幂 简单并查集 排列组合
- Python的一些零碎的东西
- iOS开发 图文混编
- keep on coding8.26-2
- SU和SUDO的辨析
- 关于链式前向星
- ACM学习历程20——竞赛中的简单数学问题之最大公约数、素数表、排列组合数
- 正则表达式
- 设计模式 组合模式
- CSS (float,clear)
- lcd驱动
- mysql出现中文乱码或不能输入中文问题的Windows或Linux系统解决方法
- java笔记--day09--接口(三)类和接口的关系
- leetcode-Best Time to Buy and Sell Stock-121
- POJ 1198 Solitaire(bfs)