分别在奇数和偶数位置计算由偶数和质数组成的N位数字
给定一个正整数N ,任务是找到在奇数索引处具有偶数位且在偶数索引处具有质数位的N 位整数的数量。
例子:
Input: N = 2
Output: 20
Explanation:
Following are the possible number of 2-digits satisfying the given criteria {20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 50, 52, 54, 56, 58, 70, 72, 74, 76, 78}. Therefore, the count of such number is 20.
Input: N = 5
Output: 1600
方法:可以使用排列和组合的概念来解决给定的问题,通过观察以下事实:偶数位置只有4 个选择[2, 3, 5, 7] ,奇数位置只有5 个选择[0, 2, 4, 6, 8] 。因此,满足给定标准的 N 位数字的计数由下式给出:
total count = 4P5Q, where P and Q is the number of even and odd positions respectively.
下面是上述方法的实现:
C++
// C++ program for the above approache
#include
using namespace std;
int m = 1000000007;
// Function to find the value of x ^ y
int power(int x, int y)
{
// Stores the value of x ^ y
int res = 1;
// Iterate until y is positive
while (y > 0)
{
// If y is odd
if ((y & 1) != 0)
res = (res * x) % m;
// Divide y by 2
y = y >> 1;
x = (x * x) % m;
}
// Return the value of x ^ y
return res;
}
// Function to find the number of N-digit
// integers satisfying the given criteria
int countNDigitNumber(int N)
{
// Count of even positions
int ne = N / 2 + N % 2;
// Count of odd positions
int no = floor(N / 2);
// Return the resultant count
return power(4, ne) * power(5, no);
}
// Driver Code
int main()
{
int N = 5;
cout << countNDigitNumber(N) % m << endl;
}
// This code is contributed by SURENDRA_GANGWAR
Java
// Java program for the above approach
import java.io.*;
class GFG {
static int m = 1000000007;
// Function to find the value of x ^ y
static int power(int x, int y)
{
// Stores the value of x ^ y
int res = 1;
// Iterate until y is positive
while (y > 0)
{
// If y is odd
if ((y & 1) != 0)
res = (res * x) % m;
// Divide y by 2
y = y >> 1;
x = (x * x) % m;
}
// Return the value of x ^ y
return res;
}
// Function to find the number of N-digit
// integers satisfying the given criteria
static int countNDigitNumber(int N)
{
// Count of even positions
int ne = N / 2 + N % 2;
// Count of odd positions
int no = (int)Math.floor(N / 2);
// Return the resultant count
return power(4, ne) * power(5, no);
}
// Driver Code
public static void main(String[] args)
{
int N = 5;
System.out.println(countNDigitNumber(N) % m);
}
}
// This code is contributed by sanjoy_62.
Python3
# Python program for the above approach
import math
m = 10**9 + 7
# Function to find the value of x ^ y
def power(x, y):
# Stores the value of x ^ y
res = 1
# Iterate until y is positive
while y > 0:
# If y is odd
if (y & 1) != 0:
res = (res * x) % m
# Divide y by 2
y = y >> 1
x = (x * x) % m
# Return the value of x ^ y
return res
# Function to find the number of N-digit
# integers satisfying the given criteria
def countNDigitNumber(n: int) -> None:
# Count of even positions
ne = N // 2 + N % 2
# Count of odd positions
no = N // 2
# Return the resultant count
return power(4, ne) * power(5, no)
# Driver Code
if __name__ == '__main__':
N = 5
print(countNDigitNumber(N) % m)
C#
// C# program for the above approach
using System;
class GFG{
static int m = 1000000007;
// Function to find the value of x ^ y
static int power(int x, int y)
{
// Stores the value of x ^ y
int res = 1;
// Iterate until y is positive
while (y > 0)
{
// If y is odd
if ((y & 1) != 0)
res = (res * x) % m;
// Divide y by 2
y = y >> 1;
x = (x * x) % m;
}
// Return the value of x ^ y
return res;
}
// Function to find the number of N-digit
// integers satisfying the given criteria
static int countNDigitNumber(int N)
{
// Count of even positions
int ne = N / 2 + N % 2;
// Count of odd positions
int no = (int)Math.Floor((double)N / 2);
// Return the resultant count
return power(4, ne) * power(5, no);
}
// Driver Code
public static void Main()
{
int N = 5;
Console.Write(countNDigitNumber(N) % m);
}
}
// This code is contributed by splevel62.
Javascript
输出:
1600
时间复杂度: O(log N)
辅助空间: O(1)