Contest2653 - 2021ACM俱乐部后备营个人训练赛第2场(补题场)
素数,又称质数,指在大于1的自然数中,除了1和此整数自身外,不被其他自然数整除的数。换句话说,只有两个正约数(1和自身)的自然数即为素数。比1大但不是素数的数被称为合数。1和0既非素数也非合数。
对于两个整数,如果它们的公约数只有1,就称这两个整数互质。
小米明白了素数和互质的概念后,老师出了这样一道题,输入两个数,如果他们互质,计算它们之和,否则,计算它们乘积。最后的结果判断是否是素数。
对于两个整数,如果它们的公约数只有1,就称这两个整数互质。
小米明白了素数和互质的概念后,老师出了这样一道题,输入两个数,如果他们互质,计算它们之和,否则,计算它们乘积。最后的结果判断是否是素数。
输入
两个整数m,n。
输出
第一行是一个整数,即根据互质情况算出的结果。
第二行是一个字符串,根据上面得到的结果判断是否是素数,如果是则输出“YES”,否则输出“NO”。
第二行是一个字符串,根据上面得到的结果判断是否是素数,如果是则输出“YES”,否则输出“NO”。
样例输入 Copy
12 7
样例输出 Copy
19
YES
提示
100%的数据:2<=m,n<=109
代码如下:
#include<iostream>
using namespace std;
int fun(int m,int n)
{
int t;
if(m<n)
{
t=m;m=n;n=t;
}
while(m%n)
{
t=n;
n=m%n;
m=t;
}
return n;
} //判断两数是否互质,若n=1,则两数互质
int main()
{long long int m,n; //因为m*n的范围较大,所用long long int
int temp;
int s;
cin>>m>>n;
if(m>=2&&n<=1000000000&&m<=1000000000&&n>=2)
{temp=fun(m,n);
if(temp==1)
{cout<<(m+n)<<endl;
for(int i=2;i<(m+n);i++)
{if(int(s=(m+n)%i)!=0)
continue;
if(int(s=(m+n)%i)==0)
cout<<"NO"<<endl;
break;}
if(s!=0)
cout<<"YES"<<endl;
}
else
{ cout<<(m*n)<<endl;
for(int i=2;i<(m+n);i++)
{if(int(s=(m+n)%i)!=0)
continue;
if(int(s=(m+n)%i)==0)
cout<<"NO"<<endl;
break;}
if(s!=0)
cout<<"YES"<<endl;}
}
}
浙公网安备 33010602011771号