题意
给你一个数 $a+bj, \ j=\sqrt {-2}$,如果它只能被1、-1、本身和本身的相反数整除,则输出Yes,否则输出No.
分析
高斯整数 $a+bi$ 是素数当且仅当:
(1)$a,b$ 中有一个是0,另一个数的绝对值是形如 $4n+3$ 的素数
(2)$a,b$ 均不为0,而 $a^2+b^2$ 为素数
与判断高斯素数的方法一样,只是将 $j = \sqrt{-1}$ 改成 $j = \sqrt{-2}$, 所以把 $a^2+b^2$ 为素数这个条件改成:$a^2 + 2b^2$。$a=b=0$ 的情况还不清楚,但这题的数据不强,随便搞。
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a, b; bool is_prime(ll x) { bool flag = true; for(ll i = 2;i*i <= x;i++) { if(x % i == 0) { flag = false; break; } } return flag; } int main() { while(scanf("%lld%lld", &a, &b) == 2) { if(a == 0) { //if(b%4 == 3 && is_prime(b)) printf("Yes\n"); //else printf("No\n"); printf("No\n"); } else { if(is_prime(a*a + 2*b*b)) printf("Yes\n"); else printf("No\n"); } } return 0; }