📜  帕斯卡三角形第N行的奇数

📅  最后修改于: 2021-04-23 17:15:11             🧑  作者: Mango

给定N,则为Pascal三角形的行号(行从0开始)。在Pascal三角形的第N行中找到奇数计数。

先决条件:帕斯卡三角以N的二进制表示形式计数1的数目

例子 :

Input : 11
Output : 8

Input : 20
Output : 4 

方法:看来答案始终是2的幂。实际上,存在以下定理:
定理:在Pascal三角形的第N行中,奇数项的数量增加了2,而在N的二进制展开中,奇数项的数量增加了1。
示例:由于83 = 64 + 16 + 2 + 1具有二进制扩展(1010011),因此行83具有pow(2,4)= 16个奇数。

下面是上述方法的实现:

C++
// CPP code to find the count of odd numbers
// in n-th row of Pascal's Triangle
#include      
using namespace std ;
  
/* Function to get no of set
   bits in binary representation 
   of positive integer n */
int countSetBits(int n)
{
    unsigned int count = 0;
    while (n)
    {
        count += n & 1;
        n >>= 1;
    }
      
    return count;
}
  
int countOfOddsPascal(int n)
{
    // Count number of 1's in binary
    // representation of n.
    int c = countSetBits(n);
      
    // Number of odd numbers in n-th
    // row is 2 raised to power the count.
    return pow(2, c);
}
  
// Driver code
int main()
{
    int n = 20;    
    cout << countOfOddsPascal(n) ;    
    return 0;
}


Java
// Java code to find the count of odd
// numbers in n-th row of Pascal's 
// Triangle
import java.io.*;
  
class GFG {
      
    /* Function to get no of set
    bits in binary representation 
    of positive integer n */
    static int countSetBits(int n)
    {
        long count = 0;
        while (n > 0)
        {
            count += n & 1;
            n >>= 1;
        }
          
        return (int)count;
    }
      
    static int countOfOddsPascal(int n)
    {
          
        // Count number of 1's in binary
        // representation of n.
        int c = countSetBits(n);
          
        // Number of odd numbers in n-th
        // row is 2 raised to power the
        // count.
        return (int)Math.pow(2, c);
    }
      
    // Driver code
    public static void main (String[] args)
    {
        int n = 20; 
        System.out.println(
                     countOfOddsPascal(n));
    }
}
  
// This code is contributed by anuj_67.


Python3
# Python code to find the count of
# odd numbers in n-th row of 
# Pascal's Triangle
  
# Function to get no of set
# bits in binary representation
# of positive integer n
def countSetBits(n):
    count =0
    while n:
        count += n & 1
        n >>= 1
          
    return count
  
def countOfOddPascal(n):
  
    # Count number of 1's in binary
    # representation of n.
    c = countSetBits(n)
  
    # Number of odd numbers in n-th
    # row is 2 raised to power the count.
    return pow(2, c)
  
# Driver Program
n = 20
print(countOfOddPascal(n))
  
# This code is contributed by Shrikant13


C#
// C# code to find the count of odd numbers
// in n-th row of Pascal's Triangle
using System;
  
class GFG {
      
    /* Function to get no of set
    bits in binary representation 
    of positive integer n */
    static int countSetBits(int n)
    {
        int count = 0;
        while (n > 0)
        {
            count += n & 1;
            n >>= 1;
        }
          
        return count;
    }
      
    static int countOfOddsPascal(int n)
    {
        // Count number of 1's in binary
        // representation of n.
        int c = countSetBits(n);
          
        // Number of odd numbers in n-th
        // row is 2 raised to power the
        // count.
        return (int)Math.Pow(2, c);
    }
      
    // Driver code
    public static void Main () 
    {
        int n = 20; 
        Console.WriteLine(
                 countOfOddsPascal(n)) ; 
    }
}
  
// This code is contributed by anuj_67.


PHP
>= 1;
    }
      
    return $count;
}
  
function countOfOddsPascal($n)
{
      
    // Count number of 1's in binary
    // representation of n.
    $c = countSetBits($n);
      
    // Number of odd numbers in n-th
    // row is 2 raised to power the count.
    return pow(2, $c);
}
  
    // Driver code
    $n = 20; 
    echo countOfOddsPascal($n) ; 
  
// This code is contributed by mits. 
?>


输出:
4

时间复杂度: O(L),其中L是给定N的二进制表示形式的长度。
参考: https : //www.math.hmc.edu/funfacts/ffiles/30001.4-5.shtml