目录
牛客_爱吃素_数学
题目解析
C++代码
Java代码
牛客_爱吃素_数学
爱吃素 (nowcoder.com)
描述:
牛妹是一个爱吃素的小女孩,所以很多素数都害怕被她吃掉。
一天,两个数字aaa和bbb为了防止被吃掉,决定和彼此相乘在一起,这样被吃掉的风险就会大大降低,但仍有一定的可能被吃掉,请你判断他们相乘后是否仍有被吃掉的风险。
也就是说,请你判断a×ba\times ba×b是否是素数。
素数是指大于111的正整数中,有且仅有两个因子的数。
题目解析
判断两数相乘是否是素数。不能直接乘起来然后判断,因为数据量太大了,不仅存不下,而且会超时。因此根据素数的性质,分类讨论。
C++代码
#include <cmath>
#include <iostream>
using namespace std;
bool isPrime(long long x) // 参数也要开long long
{
if (x < 2)
return false;
for (int i = 2; i <= sqrt(x); ++i)
{
if (x % i == 0)
return false;
}
return true;
}
int main()
{
int t = 0;
cin >> t;
while (t--)
{
long long a = 0, b = 0;
cin >> a >> b;
if ((a == 1 && isPrime(b)) || (b == 1 && isPrime(a)))
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
Java代码
import java.util.*;
public class Main
{
public static boolean isprim(long x)
{
if(x < 2) return false;
for(int i = 2; i <= Math.sqrt(x); i++)
{
if(x % i == 0)
return false;
}
return true;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int t = in.nextInt();
while(t-- != 0)
{
long a = in.nextLong(), b = in.nextLong();
if((a == 1 && isprim(b)) || (b == 1 && isprim(a)))
{
System.out.println("YES");
}
else
{
System.out.println("NO");
}
}
}
}