#include <iostream>
#include <string.h>
#include<stdlib.h>
using namespace std;
const int maxlength=1000;
bool flag[maxlength];
int a[maxlength];
int k=0;
void getprime(int maxn)
{
memset(flag,true,sizeof(flag));
for(int i=2;i<=maxn/2;i++)
{
if(flag[i]){
for(int j=i<<1;j<=maxn;j+=i)//j=i<<1相当于j=i*2,j+=i最后变成j=2的倍数,3的倍数等等
{
flag[j]=false;
}
}
}
for(int i=2;i<=maxn;i++)
{
if(flag[i])
{
a[k++]=i;
}
}
}
int main()
{
int m,n;
cin>>m>>n;
int t;
if(m>n)t=n;
else t=m;
getprime(t);
int gcd;
gcd=1;
int i=0;
do{
if((m%a[i]==0)&&(n%a[i]==0))
{
gcd=gcd*a[i];
m/=a[i];
n/=a[i];
}
else i++;
}while(i<k);
cout<<gcd<<endl;
return 0;
}
根据筛法求素数,然后求最大公约数
最新推荐文章于 2022-09-21 16:34:17 发布