📜  纽曼-香克斯-威廉姆斯素数

📅  最后修改于: 2021-09-17 07:41:35             🧑  作者: Mango

在数学中, Newman-Shanks-Williams 素数(NSW 素数)是一个素数 p,可以写成以下形式:

{\huge S_{2m+1} = \frac{ {(1+\sqrt{2})^{2m+1} + (1-\sqrt{2})^{2m+1} } }{2} }

纽曼-香克斯-威廉姆斯素数的递归关系为:
S_0 = 1
S_1 = 1
S_n = 2*S_{n-1} + S{n-2}
序列的前几项是 1, 1, 3, 7, 17, 41, 99,…

例子:

Input : n = 3
Output : 7

Input : n = 4
Output : 17 

下面是寻找第 n 个纽曼-香克斯-威廉姆斯素数的实现:

C++
// CPP Program to find Newman–Shanks–Williams prime
#include 
using namespace std;
 
// return nth Newman–Shanks–Williams prime
int nswp(int n)
{
    // Base case
    if (n == 0 || n == 1)
        return 1;
 
    // Recursive step
    return 2 * nswp(n - 1) + nswp(n - 2);
}
 
// Driven Program
int main()
{
    int n = 3;
 
    cout << nswp(n) << endl;
    return 0;
}


Java
// Java Program to find
// Newman-Shanks-Williams prime
class GFG
{
// return nth Newman-Shanks-Williams
// prime
static int nswp(int n)
{
    // Base case
    if (n == 0 || n == 1)
        return 1;
 
    // Recursive step
    return 2 * nswp(n - 1) + nswp(n - 2);
}
 
// Driver code
public static void main (String[] args)
{
    int n = 3;
    System.out.println(nswp(n));
}
}
 
// This code is contributed by Anant Agarwal.


Python3
# Python3 Program to find Newman–Shanks–Williams prime
 
# return nth Newman–Shanks–Williams prime
def nswp(n):
     
    # Base case
    if n == 0 or n == 1:
        return 1
 
    # Recursive step
    return 2 * nswp(n - 1) + nswp(n - 2)
 
# Driven Program
n = 3
print (nswp(n))
 
 
# This code is contributed by Shreyanshi Arun.


C#
// C# Program to find
// Newman-Shanks-Williams prime
using System;
 
class GFG {
     
    // return nth Newman-Shanks-Williams
    // prime
    static int nswp(int n)
    {
         
        // Base case
        if (n == 0 || n == 1)
            return 1;
 
        // Recursive step
        return 2 * nswp(n - 1) + nswp(n - 2);
    }
 
    // Driver code
    public static void Main()
    {
        int n = 3;
         
        Console.WriteLine(nswp(n));
    }
}
 
// This code is contributed by vt_m.


PHP


Javascript


C++
// CPP Program to find Newman–Shanks–Williams prime
#include 
using namespace std;
 
// return nth Newman–Shanks–Williams prime
int nswp(int n)
{
    int dp[n + 1];
 
    // Base case
    dp[0] = dp[1] = 1;
 
    // Finding nth Newman–Shanks–Williams prime
    for (int i = 2; i <= n; i++)
        dp[i] = 2 * dp[i - 1] + dp[i - 2];
 
    return dp[n];
}
 
// Driver Program
int main()
{
    int n = 3;
 
    cout << nswp(n) << endl;
    return 0;
}


Java
// Java Program for finding
// Newman-Shanks-Williams prime
import java.util.*;
 
class GFG
{
    // return nth Newman_Shanks_Williams prime
    public static int nswpn(int n)
    {
        int dp[] = new int[n + 1];
         
        // Base case
        dp[0] = dp[1] = 1;
         
        // Finding nth Newman_Shanks_Williams prime
        for (int i = 2; i <= n; i++)
          dp[i] = 2 * dp[i - 1] + dp[i - 2];
         
        return dp[n];
    }
     
    // Driver Program
    public static void main (String[] args) {
         
        int n = 3;
         
        System.out.println(nswpn(n));
    }
}
 
/* This code is contributed by Akash Singh */


Python3
# Python3 Program to find
# Newman–Shanks–Williams prime
 
# return nth Newman–Shanks
# –Williams prime
def nswp(n):
     
    # Base case
    dp = [1 for x in range(n + 1)];
     
    # Finding nth Newman–Shanks
    # –Williams prime
    for i in range(2, n + 1):
        dp[i] = (2 * dp[i - 1] +
                     dp[i - 2]);
    return dp[n];
 
# Driver Code
n = 3;
print(nswp(n));
 
# This code is contributed
# by mits


C#
// C# Program to find Newman–Shanks–Williams prime
 
using System;
 
class GFG {
 
    // return nth Newman–Shanks–Williams prime
    static int nswp(int n)
    {
         
        int[] dp = new int[n + 1];
 
        // Base case
        dp[0] = dp[1] = 1;
 
        // Finding nth Newman–Shanks–Williams prime
        for (int i = 2; i <= n; i++)
            dp[i] = 2 * dp[i - 1] + dp[i - 2];
 
        return dp[n];
    }
 
    // Driver Program
    public static void Main()
    {
        int n = 3;
 
        Console.WriteLine(nswp(n));
    }
}
 
// This code is contributed by vt_m.


PHP


Javascript


C++
// C++ code
#include 
using namespace std;
 
int nswp(int n)
{
     
    if(n == 0 || n == 1)
    {
        return 1;
    }
     
    // Here we only need to store last 2 values
    // to find the value of n,
    // so we will store those 2 values only.
    int a = 1, b = 1;
     
    for(int i = 2; i <= n; ++i)
    {
        int c = 2 * b + a;
        a = b;
        b = c;
    }
    return b;
}
int main()
{
    int n = 3;
    cout << nswp(n);
    return 0;
}
 
// This code is contributed by SHUBHAMSINGH10


Java
//Write Java code here
class GFG{
     static int nswp(int n){
           if(n==0 || n==1) return 1;
           //Here we only need to store last 2 values to find the value of n,
           //so we will store those 2 values only.
           int a=1,b=1;
           for(int i=2;i<=n;++i){
               int c=2*b+a;
               a=b;
               b=c;
           }
           return b;
     }
     public static void main(String[] args){
          int n=3;
          System.out.println(nswp(n));
     }
}


Python3
# Write Python3 code here
 
def nswp(n):
    if(n<2): return 1
    a,b=1,1
    for i in range(2,n+1):
        c=2*b+a
        a=b
        b=c
    return b
n=3
print(nswp(n))


C#
// C# code
using System;
 
class GFG
{
    static int nswp(int n) {
        if (n == 0 || n == 1)
            return 1;
             
        // Here we only need to store last 2 values
        // to find the value of n,
        // so we will store those 2 values only.
        int a = 1, b = 1;
        for (int i = 2; i <= n; ++i) {
            int c = 2 * b + a;
            a = b;
            b = c;
        }
        return b;
    }
 
    public static void Main(String[] args)
    {
        int n = 3;
        Console.WriteLine(nswp(n));
    }
}
 
// This code is contributed by PrinciRaj1992


Javascript


输出:

7

下面是找到第 n 个 Newman-Shanks-Williams 素数的动态规划解决方案:

C++

// CPP Program to find Newman–Shanks–Williams prime
#include 
using namespace std;
 
// return nth Newman–Shanks–Williams prime
int nswp(int n)
{
    int dp[n + 1];
 
    // Base case
    dp[0] = dp[1] = 1;
 
    // Finding nth Newman–Shanks–Williams prime
    for (int i = 2; i <= n; i++)
        dp[i] = 2 * dp[i - 1] + dp[i - 2];
 
    return dp[n];
}
 
// Driver Program
int main()
{
    int n = 3;
 
    cout << nswp(n) << endl;
    return 0;
}

Java

// Java Program for finding
// Newman-Shanks-Williams prime
import java.util.*;
 
class GFG
{
    // return nth Newman_Shanks_Williams prime
    public static int nswpn(int n)
    {
        int dp[] = new int[n + 1];
         
        // Base case
        dp[0] = dp[1] = 1;
         
        // Finding nth Newman_Shanks_Williams prime
        for (int i = 2; i <= n; i++)
          dp[i] = 2 * dp[i - 1] + dp[i - 2];
         
        return dp[n];
    }
     
    // Driver Program
    public static void main (String[] args) {
         
        int n = 3;
         
        System.out.println(nswpn(n));
    }
}
 
/* This code is contributed by Akash Singh */

蟒蛇3

# Python3 Program to find
# Newman–Shanks–Williams prime
 
# return nth Newman–Shanks
# –Williams prime
def nswp(n):
     
    # Base case
    dp = [1 for x in range(n + 1)];
     
    # Finding nth Newman–Shanks
    # –Williams prime
    for i in range(2, n + 1):
        dp[i] = (2 * dp[i - 1] +
                     dp[i - 2]);
    return dp[n];
 
# Driver Code
n = 3;
print(nswp(n));
 
# This code is contributed
# by mits

C#

// C# Program to find Newman–Shanks–Williams prime
 
using System;
 
class GFG {
 
    // return nth Newman–Shanks–Williams prime
    static int nswp(int n)
    {
         
        int[] dp = new int[n + 1];
 
        // Base case
        dp[0] = dp[1] = 1;
 
        // Finding nth Newman–Shanks–Williams prime
        for (int i = 2; i <= n; i++)
            dp[i] = 2 * dp[i - 1] + dp[i - 2];
 
        return dp[n];
    }
 
    // Driver Program
    public static void Main()
    {
        int n = 3;
 
        Console.WriteLine(nswp(n));
    }
}
 
// This code is contributed by vt_m.

PHP


Javascript


输出:

7

下面是空间复杂度为 O(1) 的代码

C++

// C++ code
#include 
using namespace std;
 
int nswp(int n)
{
     
    if(n == 0 || n == 1)
    {
        return 1;
    }
     
    // Here we only need to store last 2 values
    // to find the value of n,
    // so we will store those 2 values only.
    int a = 1, b = 1;
     
    for(int i = 2; i <= n; ++i)
    {
        int c = 2 * b + a;
        a = b;
        b = c;
    }
    return b;
}
int main()
{
    int n = 3;
    cout << nswp(n);
    return 0;
}
 
// This code is contributed by SHUBHAMSINGH10

Java

//Write Java code here
class GFG{
     static int nswp(int n){
           if(n==0 || n==1) return 1;
           //Here we only need to store last 2 values to find the value of n,
           //so we will store those 2 values only.
           int a=1,b=1;
           for(int i=2;i<=n;++i){
               int c=2*b+a;
               a=b;
               b=c;
           }
           return b;
     }
     public static void main(String[] args){
          int n=3;
          System.out.println(nswp(n));
     }
}

蟒蛇3

# Write Python3 code here
 
def nswp(n):
    if(n<2): return 1
    a,b=1,1
    for i in range(2,n+1):
        c=2*b+a
        a=b
        b=c
    return b
n=3
print(nswp(n))

C#

// C# code
using System;
 
class GFG
{
    static int nswp(int n) {
        if (n == 0 || n == 1)
            return 1;
             
        // Here we only need to store last 2 values
        // to find the value of n,
        // so we will store those 2 values only.
        int a = 1, b = 1;
        for (int i = 2; i <= n; ++i) {
            int c = 2 * b + a;
            a = b;
            b = c;
        }
        return b;
    }
 
    public static void Main(String[] args)
    {
        int n = 3;
        Console.WriteLine(nswp(n));
    }
}
 
// This code is contributed by PrinciRaj1992

Javascript


输出:

7