Thue-Morse sequence

Thue–Morse sequence, or Prouhet–Thue–Morse sequence, is an infinite binary sequence of 0s and 1s. The sequence is obtained by starting with 0 and successively appending the Boolean complement of the sequence obtained so far.

First few steps :

Start with 0
Append complement of 0, we get 01
Append complement of 01, we get 0110
Append complement of 0110, we get 01101001



Given a whole number n. The task is to find the nth string formed of by Thue–Morse sequence i.e prefix of length 2n-1 of Thue–Morse sequence.
Examples:

Input : n = 4
Output : 01101001
We get 0, 01, 0110 and 01101001
in fourth iteration.

Input : n = 3
Output : 0110

The idea is to initialize the output string with 0, then run a loop n – 1 times and for each iteration find the complement of the string and append it to the string.

Below is implementation of this approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP Program to find nth term of Thue-Morse sequence.
#include <bits/stdc++.h>
using namespace std;
  
// Return the complement of the binary string.
string complement(string s)
{
    string comps;
  
    // finding the complement of the string.
    for (int i = 0; i < s.length(); i++) {
  
        // if character is 0, append 1
        if (s.at(i) == '0')
            comps += '1';
  
        // if character is 1, append 0.
        else
            comps += '0';
    }
  
    return comps;
}
  
// Return the nth term of Thue-Morse sequence.
string nthTerm(int n)
{
    // Initialing the string to 0
    string s = "0";
  
    // Running the loop for n - 1 time.
    for (int i = 1; i < n; i++) 
  
        // appending the complement of 
        // the string to the string.
        s += complement(s);
      
  
    return s;
}
// Driven Program
int main()
{
    int n = 4;
    cout << nthTerm(n) << endl;
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java Program to find nth 
// term of Thue-Morse sequence.
  
class GFG
{
    // Return the complement 
    // of the binary String.
    static String complement(String s)
    {
        String comps = "";
      
        // finding the complement
        // of the String.
        for (int i = 0; i < s.length(); i++) 
        {
      
            // if character is 0,
            // append 1
            if (s.charAt(i) == '0')
                comps += '1';
      
            // if character is 1, 
            // append 0.
            else
                comps += '0';
        }
      
        return comps;
    }
      
    // Return the nth term
    // of Thue-Morse sequence.
    static String nthTerm(int n)
    {
        // Initialing the 
        // String to 0
        String s = "0";
      
        // Running the loop
        // for n - 1 time.
        for (int i = 1; i < n; i++) 
      
            // appending the complement of 
            // the String to the String.
            s += complement(s);
          
      
        return s;
    }
      
    // Driven Code
public static void main(String[] args)
    {
        int n = 4;
        System.out.print(nthTerm(n));
    }
}
  
// This code is contributed by 
// mits

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 Program to find nth term of
# Thue-Morse sequence.
  
# Return the complement of the
# binary string.
def complement(s):
    comps = "";
  
    # finding the complement
    # of the string.
    for i in range(len(s)): 
  
        # if character is 0, append 1
        if (s[i] == '0'):
            comps += '1';
  
        # if character is 1, append 0.
        else:
            comps += '0';
  
    return comps;
  
# Return the nth term of 
# Thue-Morse sequence.
def nthTerm(n):
  
    # Initialing the string to 0
    s = "0";
  
    # Running the loop for n - 1 time.
    for i in range(1, n): 
  
        # appending the complement of 
        # the string to the string.
        s += complement(s);
      
    return s;
  
# Driver Code
n = 4;
print(nthTerm(n));
  
# This code is contributed 
# by mits

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# Program to find nth 
// term of Thue-Morse sequence.
using System;
  
class GFG
{
    // Return the complement 
    // of the binary string.
    static string complement(string s)
    {
        string comps = "";
      
        // finding the complement
        // of the string.
        for (int i = 0; i < s.Length; i++) 
        {
      
            // if character is 0,
            // append 1
            if (s[i] == '0')
                comps += '1';
      
            // if character is 1, 
            // append 0.
            else
                comps += '0';
        }
      
        return comps;
    }
      
    // Return the nth term
    // of Thue-Morse sequence.
    static string nthTerm(int n)
    {
        // Initialing the 
        // string to 0
        string s = "0";
      
        // Running the loop
        // for n - 1 time.
        for (int i = 1; i < n; i++) 
      
            // appending the complement of 
            // the string to the string.
            s += complement(s);
          
      
        return s;
    }
      
    // Driven Code
    static void Main()
    {
        int n = 4;
        Console.Write(nthTerm(n));
    }
}
  
// This code is contributed by 
// Manish Shaw(manishshaw1)

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP Program to find nth 
// term of Thue-Morse sequence.
  
// Return the complement 
// of the binary string.
function complement($s)
{
    $comps = "";
  
    // finding the complement
    // of the string.
    for ($i = 0;
         $i < strlen($s); $i++) 
    {
  
        // if character is
        // 0, append 1
        if ($s[$i] == '0')
            $comps .= '1';
  
        // if character is 
        // 1, append 0.
        else
            $comps .= '0';
    }
  
    return $comps;
}
  
// Return the nth term 
// of Thue-Morse sequence.
function nthTerm($n)
{
    // Initialing the 
    // string to 0
    $s = "0";
  
    // Running the loop
    // for n - 1 time.
    for ($i = 1; $i < $n; $i++) 
  
        // appending the complement of 
        // the string to the string.
        $s .= complement($s);
      
  
    return $s;
}
  
// Driven Code
$n = 4;
echo nthTerm($n);
  
// This code is contributed 
// by mits
?>

chevron_right



Output:
01101001



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.