蓝桥杯 TC_荣耀之路

南阳理工学院的新生交流题目
思路
先查询n,m之间素数个数,若个数为素数,则输出n,m的最小公倍数,否则输出n,m的最大公约数。
数据范围不大,从min(n,m)到max(n,m)一路遍历,统计素数个数,再判断素数的个数是否为素数,若是,输出(n,m)最小公倍数,否则输出(n,m)的最大公约数。

#include<iostream>
#include<string.h>
#include<matn.h> 
int gcd(int a,int b)
{
	int t;
	while(b!=0)
	{
		t=a;
		a=b;
		b=t%a;
	}
	return a;
}
int lcm(int a,int b)
{
	return a*b/gcd(a,b);
}
int judge(int a)
{
	int i;
	for(i=2;i<sqrt(a);i++)
	{
		if(a%i==0)
		{
			return 0;
		}
	}
	if(a==0||a==1)
	{
		return 0;
	}
	return 1;
}

int main()
{
	int nn;
	scanf("%d%d",&nn);
	while(nn--)
	{
		int n,m,prime=0,temp;
		scanf("%d%d",&n,&m);
		if(n<m)
		{
			temp=n;
			n=m;
			m=temp;
		}
		for(i=n;i<=m;i++)
		{
			if(judge(i))
			{
				prime++;
			}
		}
		if(judge(prime))
		{
			printf("%d
",lcm(n,m));
		}
		else{
			printf("%d
",gcd(n,m));
		}
	}
	
}
原文地址:https://www.cnblogs.com/AmosAlbert/p/12832316.html