[英]How to check whether a number is prime or not (Algorithm using brute force)
[英]If p is prime, how to check whether ap + b is prime or not using a fast algorithm?
我們有三個數字a , b和p 。 p是一個大質數,但a和b比p小得多。
如何使用快速算法找出ap + b是否為質數?
我們不想使用BigInteger類之類的東西。
請注意,我們可以了解有關p的其他信息。 例如,如果m小,則可以輕松計算出p%m 。
這個問題更適合數學合作伙伴論壇。
如果gcd(a, b) != 1
則它不是素數。
如果(a + b) % 2 != 1
則它不是素數。
看着3.7 + 4
不是主要的會導致另一個規則。
所以做一些數學,即
(a % b) * (p % b)
盡管p % b
毫無疑問,但必須是質數。
假設 :您可以使用BigInteger類。
您可以將ap+b
格式轉換為BigInteger並檢查素數。 下面是在Java中執行此操作的代碼。 由於a
和b
在OP中不是很大,並且是int
,因此可以將它們存儲在int中。 由於p
非常大,我們將其存儲在BigInteger類中
希望這可以幫助:
String p = "2432902008176640029";
int a = 30, b = 101;
BigInteger f = new BigInteger(p);
BigInteger f1 = f.multiply(BigInteger.valueOf(a));
BigInteger f2 = f1.add(BigInteger.valueOf(b));
System.out.println(f2.isProbablePrime(1));
f2.isProbablePrime(1)
檢查ap+b
形成的數字是否為質數,確定性為1
。
BigInteger類中用於檢查素數的這項技術實際上是以有效方式實施的Miller-Rabin素數測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.