Newman–Shanks–Williams prime

In mathematics, a Newman–Shanks–Williams prime (NSW prime) is a prime number p which can be written in the form:
 { \Huge  S_{2m+1} = \frac{  {(1+\sqrt{2})^{2m+1}  + (1-\sqrt{2})^{2m+1} }  }{2} }

Recurrence relation for Newman–Shanks–Williams prime is:

S_0 = 1
S_1 = 1
S_n = 2*S_{n-1} + S{n-2}
The first few terms of the sequence are 1, 1, 3, 7, 17, 41, 99, ….



Examples:

Input : n = 3
Output : 7

Input : n = 4
Output : 17

Below is the implementation of finding nth Newman–Shanks–Williams prime:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP Program to find Newman–Shanks–Williams prime
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP Program to find 
// Newman–Shanks–Williams prime
  
// return nth Newman – 
// Shanks – Williams prime
function nswp($n)
{
      
    // Base case
    if ($n == 0 || $n == 1)
        return 1;
  
    // Recursive step
    return 2 * nswp($n - 1) + 
               nswp($n - 2);
}
  
// Driver Code
$n = 3;
echo(nswp($n));
  
// This code is contributed by Ajit.
?>

chevron_right



Output:

7

Below is Dynamic Programming solution of finding nth Newman–Shanks–Williams prime:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP Program to find Newman–Shanks–Williams prime
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 */

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP Program to find 
// Newman–Shanks–Williams prime
  
// return nth Newman–Shanks
// –Williams prime
function nswp($n)
{
      
    // Base case
    $dp[0] = $dp[1] = 1;
  
    // Finding nth Newman–Shanks
    // –Williams prime
    for ($i = 2; $i <= $n; $i++)
        $dp[$i] = 2 * $dp[$i - 1] + 
                      $dp[$i - 2];
  
    return $dp[$n];
}
  
// Driver Code
$n = 3;
echo(nswp($n));
  
// This code is contributed by Ajit.
?>

chevron_right



Output:

7

Below is the code with O(1) space complexity

Java

filter_none

edit
close

play_arrow

link
brightness_4
code

//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));
     }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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))

chevron_right



Output:

7


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.