zoukankan      html  css  js  c++  java
  • poj 1808 Quadratic Residues 二次剩余

    /*
     * poj1808.c
     * Created on: 2011-10-12
     *  Author: bjfuwangzhu
     */
    /*
     *> 考虑形如x2≡n(mod m)的同余式,其中m > 1,(m,n)=1。
     *> 若此同余式有解,则n称为模m的二次剩余;若此同余式无解,则n称为模m的二次非剩余。
     *> 设p是一个奇素数,则模p的二次剩余和二次非剩余个数正好是“一半对一半”,
     *> 下表给出几个较小的素数模的二次剩余和非剩余:
     *>  > p    剩余    非剩余 > 3    1    2 > 5    1,4    2,3 > 7
     *>  1,2,4    3,5,6 > 11    1,3,4,5,9    2,6,7,8,10 > 13
     *>  1,3,4,9,11,12    2,5,6,7,8,11 > 此外,
     *>  如果n是模p的二次剩余,则N^((p-1)/2)≡1(mod p) 。如果n是模p的二次非剩余,
     *>  则N^((p-1)/2)≡-1(mod p) 。 */
    #include<stdio.h>
    #define LL long long
    int modular_exp(int a, int b, int c) {
    	LL res, temp;
    	res = 1 % c, temp = a % c;
    	while (b) {
    		if (b & 1) {
    			res = res * temp % c;
    		}
    		temp = temp * temp % c;
    		b >>= 1;
    	}
    	return (int) res;
    }
    void solve(int a, int p) {
    	a = (a % p + p) % p;
    	if (modular_exp(a, (p - 1) / 2, p) == 1) {
    		puts("1");
    		return;
    	}
    	puts("-1");
    }
    int main() {
    #ifndef ONLINE_JUDGE
    	freopen("data.in", "r", stdin);
    #endif
    	int t, i, a, p;
    	scanf("%d", &t);
    	for (i = 1; i <= t; i++) {
    		scanf("%d %d", &a, &p);
    		printf("Scenario #%d:\n", i);
    		solve(a, p);
    		printf("\n");
    	}
    	return 0;
    }
    
  • 相关阅读:
    无符合条件的记录,SUM函数返回NULL。返回0而不是Null
    Java中的堆栈,队列,链表
    Java集合类的问题
    2014.7.30日结
    我的CSS之路1
    2014.7.27-7.28日结
    LeetCode解题源代码链接集锦一
    2014.7.23日结
    C++之数组声明与初始化
    系统结构之指令
  • 原文地址:https://www.cnblogs.com/xiaoxian1369/p/2208979.html
Copyright © 2011-2022 走看看