forked from lemonbashar/interviews
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPseudoPrimeNumbers.java
More file actions
executable file
·69 lines (65 loc) · 1.74 KB
/
PseudoPrimeNumbers.java
File metadata and controls
executable file
·69 lines (65 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
* Fermat’s theorem states that for any
* prime number p and for any integer a > 1,
* a
* p == a (mod p). That is, if we raise a to
* the pth power and divide by p, the remainder
* is a. Some (but not very many) nonprime
* values of p, known as base-a pseudoprimes,
* have this property for some a.
* (And some, known as Carmichael Numbers,
* are base-a pseudoprimes for all a.)
* Given 2 < p ≤ 1, 000, 000, 000 and 1 <
* a < p, determine whether or not p is a
* base-a pseudoprime.
* Input
* Input contains several test cases followed by a line containing ‘0 0’. Each test case consists of a line
* containing p and a.
* Output
* For each test case, output ‘yes’ if p is a base-a pseudoprime; otherwise output ‘no’.
* Sample Input
* 3 2
* 10 3
* 341 2
* 341 3
* 1105 2
* 1105 3
* 0 0
* Sample Output
* no
* no
* yes
* no
* yes
* yes
*/
//https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2262
import java.math.BigInteger;
import java.util.Scanner;
public class PseudoPrimeNumbers {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (true) {
int p = input.nextInt();
int a = input.nextInt();
if (a == 0 && p == 0) {
break;
}
BigInteger pAsBigInteger = new BigInteger(p + "");
BigInteger aAsBigInteger = new BigInteger(a + "");
String answer = "";
if (!pAsBigInteger.isProbablePrime(10)) {
BigInteger result = aAsBigInteger.modPow(pAsBigInteger,
pAsBigInteger);
if (result.equals(aAsBigInteger)) {
answer = "yes";
} else {
answer = "no";
}
} else {
answer = "no";
}
System.out.println(answer);
}
}
}