数学相关

27 阅读1分钟

最大公约数GCD

#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
	if(b == 0) return a;
	else return gcd(b, a%b);
}

int main(){
	int a,b;
	cin>>a>>b;
	cout<<gcd(a,b); 
	
	return 0;
}

最小公倍数LCM

对于求两个数的最小公倍数,只需要记住下面这个公式即可。

LCM(x, y) = x * y / GCD(x, y)

翻译一下就是:两个数的最小公倍数等于两个数的乘积除以两个数的最大公约数。 所以要求两个数的最小公倍数,我们只需求出他们的最大公约数即可。

#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
	if(b == 0) return a;
	else return gcd(b, a%b);
}
int main(){
	int a,b;
	cin>>a>>b;
	int c=gcd(a,b); 
	int d=a*b/c;
	cout<<d;
	
	return 0;
}

素数判断

一个大于1的自然数,除了1和它本身之外,没有别的因子,我们就称它为素数。

判断一个素数,可以从定义出发,从2到小于这个数的每个数去除,看是否能除尽。一般情况下,我们没有必要判断这么多个数,只用判断到sqrt(x)就停止了。因为如果比sqrt(x)大的数能除尽的话,就必然存在一个比sqrt(x)小的数能被除尽。(sqrt平方根函数)

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,flag=0;
	cin>>a;
	for(int i=2; i<=sqrt(a); i++){
		if(a%i == 0){
			flag=0;
			break; 
		}else
			flag=1;
	}
	if(flag==1) cout<<"是素数";
	else cout<<"不是素数";
	return 0;
}

质因数个数

示例

输入:120
输出:5

输入:8
输出:3

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	while(cin>>n){
		int ans=0;
		int i=2;
		int q=sqrt(n);
		while(n!=1){
			while(n%i==0){ //i是质因数 
				//cout<<i<<" "; //输出质因数 
				n=n/i;
				ans++;
			}
			if(i==q+1) 
				break;
			i++;
		}
		if(n!=1) ans++;
		cout<<ans<<endl;
	} 
	return 0;
}