zoukankan      html  css  js  c++  java
  • UVA 1415

    UVA 1415 - Gauss Prime

    题目链接

    题意:给定a + bi,推断是否是高斯素数,i = sqrt(-2)。

    思路:普通的高斯素数i = sqrt(-1),推断方法为:
    1、假设a或b为0。推断还有一个数为4 * n + 3形式的素数(用到费马平方和定理)
    2、假设a、b都不为0,推断a ^ 2 + b ^ 2 是否为素数

    那么这题,提取出sqrt(2)来,就和基本情况一样了。
    对于2,变成: 假设a、b都不为0,推断a ^ 2 + 2 b ^ 2是否为素数
    对于1。事实上仅仅要a = 0,b始终能够拆成两个数相乘了,就不是高斯素数了

    。这样一来问题就攻克了

    代码:

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    const int N = 20005;
    int t, a, b, prime[N], pn = 0, vis[N];
    
    bool judge() {
        if (a == 0)
    	return false;
        int tmp = a * a + 2 * b * b;
        for (int i = 0; i < pn && prime[i] < tmp; i++)
    	if (tmp % prime[i] == 0) return false;
        return true;
    }
    
    int main() {
        vis[1] = 1;
        for (int i = 2; i < N; i++) {
    	if (vis[i]) continue;
    	prime[pn++] = i;
    	for (int j = i * i; j < N; j += i) {
    	    vis[j] = 1;
    	}
        }
        scanf("%d", &t);
        while (t--) {
    	scanf("%d%d", &a, &b);
    	printf("%s
    ", judge()?"Yes":"No");
        }
        return 0;
    }


  • 相关阅读:
    HDU 3068 Manacher
    HDU 6188最小费用流
    Codeforces Round #442 (Div. 2) Danil and a Part-time Job
    并查集
    HDU 5988最小网络流(浮点数)
    HOJ
    HOJ
    POJ
    POJ
    关于async
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7043843.html
Copyright © 2011-2022 走看看