给定一个正整数n,任务是检查它是否是Wagstaff素数。如果给定的号码是Wagstaff prime,则打印“ YES”,否则打印“ NO”。
Wagstaff素数:在数学上,Wagstaff素数是以下形式的素数“ n”
其中“ q”是奇数质数。
前几个Wagstaff质数是:
3, 11, 43, 683, 2731, 43691, 174763, 2796203……….
例子:
Input: 43
Output: Yes
43 can be expressed as - (27 + 1 )/ 3
Input: 31
Output: No
31 can not be expressed in above mentioned form.
方法:
- 首先检查给定的数字是否是质数。要检查是否为质数,请参考此内容。
- 然后检查它是否可以用(n * 3 – 1)的形式表示,并且应该是2的幂。要检查数字是否是2的幂,请参考此。
- 如果两个条件都成立,则该数字为Wagstaff质数。因此打印“是”。否则打印“否”
下面是上述方法的实现:
C++
// CPP program to check if a number is
// Wagstaff prime or not
#include
using namespace std;
// Function to check if a number is prime or not
bool isPrime(int n)
{
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we can skip
// middle five numbers in below loop
if (n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i = i + 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
// Utility function to check power of two
bool isPowerOfTwo(int n)
{
return (n && !(n & (n - 1)));
}
// Driver Program
int main()
{
int n = 43;
// Check if number is prime
// and of the form (2^q +1 )/ 3
if (isPrime(n) && (isPowerOfTwo(n * 3 - 1))) {
cout << "YES\n";
}
else {
cout << "NO\n";
}
return 0;
}
Java
// JAVA program to check if a number is
// Wagstaff prime or not
class GFG {
// Function to check if a number is prime or not
static boolean isPrime(int n)
{
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we can skip
// middle five numbers in below loop
if (n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i = i + 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
// Utility function to check power of two
static boolean isPowerOfTwo(int n)
{
return n != 0 && ((n & (n - 1)) == 0);
}
// Driver Program
public static void main(String[] args)
{
int n = 43;
// Check if number is prime
// and of the form ( 2^q +1 )/3
if (isPrime(n) && (isPowerOfTwo(n * 3 - 1))) {
System.out.println("YES");
}
else {
System.out.println("NO");
}
}
}
Python3
# Python 3 program to check if a number is
# Wagstaff prime or not
# Utility function to check
# if a number is prime or not
def isPrime(n) :
# Corner cases
if (n <= 1) :
return False
if (n <= 3) :
return True
# This is checked so that we can skip
# middle five numbers in below loop
if (n % 2 == 0 or n % 3 == 0) :
return False
i = 5
while(i * i <= n) :
if (n % i == 0 or n % (i + 2) == 0) :
return False
i = i + 6
return True
# Utility function to Check
# power of two
def isPowerOfTwo(n):
return (n and (not(n & (n - 1))))
# Driver Code
n = 43
# Check if number is prime
# and of the form ( 2 ^ q + 1 ) / 3
if(isPrime(n) and isPowerOfTwo(n * 3-1)):
print("YES")
else:
print("NO")
C#
// C# program to check if a number
// is Wagstaff prime or not
using System;
class GFG
{
// Function to check if a
// number is prime or not
static bool isPrime(int n)
{
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we
// can skip middle five numbers
// in below loop
if (n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5;
i * i <= n; i = i + 6)
{
if (n % i == 0 ||
n % (i + 2) == 0)
{
return false;
}
}
return true;
}
// Utility function to
// check power of two
static bool isPowerOfTwo(int n)
{
return n != 0 && ((n & (n - 1)) == 0);
}
// Driver Code
public static void Main()
{
int n = 43;
// Check if number is prime
// and of the form ( 2^q +1 )/3
if (isPrime(n) &&
(isPowerOfTwo(n * 3 - 1)))
{
Console.WriteLine("YES");
}
else
{
Console.WriteLine("NO");
}
}
}
// This code is contributed
// by inder_verma
PHP
输出:
YES
时间复杂度: O(n 1/2 )
辅助空间: O(1)