给定一个表示骰子数量的整数N ,任务是找到出现在N个投掷骰子的顶面上的数字乘积是质数的概率。所有N个骰子必须同时投掷。
例子:
Input: N = 2
Output: 6 / 36
Explanation:
On throwing N(=2) dices simultaneously, the possible outcomes on the top faces of N(=2) dices having product equal to a prime number are: {(1, 2), (1, 3), (1, 5), (2, 1), (3, 1), (5, 1)}.
Therefore, the count of favourable outcomes = 6 and the count of the sample space is = 36
Therefore, the required output is (6 / 36)
Input: N = 3
Output: 9 / 216
天真的方法:解决此问题的最简单方法是通过同时抛出N个骰子在N个骰子的顶面上生成所有可能的结果,并针对每个可能的结果检查顶面上的数字乘积是否为质数。如果发现为真,则增加计数器。最后,打印获得顶面上数字乘积作为质数的概率。
时间复杂度: O(6 N * N)
辅助空间: O(1)
高效的方法:为了优化上述方法,我们的想法是利用以下事实:只有(N – 1)个数字为1且其余数字为质数时, N个数的乘积才是质数。以下是观察结果:
If the product of N numbers is a prime number then the value of (N – 1) numbers must be 1 and the remaining number must be a prime number.
Total count of prime numbers in the range [1, 6] is 3.
Therefore, the total number of outcomes in which the product of N numbers on the top faces as a prime number = 3 * N.
P(E) = N(E) / N(S)
P(E) = probability of getting the product of numbers on the top faces of N dices as a prime number.
N(E) = total count of favourable outcomes = 3 * N
N(S) = total number of events in the sample space = 6N
请按照以下步骤解决此问题:
- 初始化一个变量,例如N_E,以存储有利结果的计数。
- 初始化一个变量,例如N_S,以存储样本空间的数量。
- 更新N_E = 3 * N。
- 更新N_S = 6 N。
- 最后,打印(N_E / N_S)的值。
下面是上述方法的实现
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to find the value
// of power(X, N)
long long int power(long long int x,
long long int N)
{
// Stores the value
// of (X ^ N)
long long int res = 1;
// Calculate the value of
// power(x, N)
while (N > 0) {
// If N is odd
if(N & 1) {
//Update res
res = (res * x);
}
//Update x
x = (x * x);
//Update N
N = N >> 1;
}
return res;
}
// Function to find the probability of
// obtaining a prime number as the
// product of N thrown dices
void probablityPrimeprod(long long int N)
{
// Stores count of favorable outcomes
long long int N_E = 3 * N;
// Stores count of sample space
long long int N_S = power(6, N);
// Print the required probablity
cout<
Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
// Function to find the value
// of power(X, N)
static int power(int x, int N)
{
// Stores the value
// of (X ^ N)
int res = 1;
// Calculate the value of
// power(x, N)
while (N > 0)
{
// If N is odd
if (N % 2 == 1)
{
// Update res
res = (res * x);
}
// Update x
x = (x * x);
// Update N
N = N >> 1;
}
return res;
}
// Function to find the probability of
// obtaining a prime number as the
// product of N thrown dices
static void probablityPrimeprod(int N)
{
// Stores count of favorable outcomes
int N_E = 3 * N;
// Stores count of sample space
int N_S = power(6, N);
// Print the required probablity
System.out.print(N_E + " / " + N_S);
}
// Driver code
public static void main(String[] args)
{
int N = 2;
probablityPrimeprod(N);
}
}
// This code is contributed by Amit Katiyar
Python3
# Python3 program to implement
# the above approach
# Function to find the value
# of power(X, N)
def power(x, N):
# Stores the value
# of (X ^ N)
res = 1
# Calculate the value of
# power(x, N)
while (N > 0):
# If N is odd
if (N % 2 == 1):
# Update res
res = (res * x)
# Update x
x = (x * x)
# Update N
N = N >> 1
return res
# Function to find the probability of
# obtaining a prime number as the
# product of N thrown dices
def probablityPrimeprod(N):
# Stores count of favorable outcomes
N_E = 3 * N
# Stores count of sample space
N_S = power(6, N)
# Prthe required probablity
print(N_E, " / ", N_S)
# Driver code
if __name__ == '__main__':
N = 2
probablityPrimeprod(N)
# This code is contributed by 29AjayKumar
C#
// C# program to implement
// the above approach
using System;
class GFG{
// Function to find the
// value of power(X, N)
static int power(int x,
int N)
{
// Stores the value
// of (X ^ N)
int res = 1;
// Calculate the value
// of power(x, N)
while (N > 0)
{
// If N is odd
if (N % 2 == 1)
{
// Update res
res = (res * x);
}
// Update x
x = (x * x);
// Update N
N = N >> 1;
}
return res;
}
// Function to find the probability
// of obtaining a prime number as
// the product of N thrown dices
static void probablityPrimeprod(int N)
{
// Stores count of favorable
// outcomes
int N_E = 3 * N;
// Stores count of sample
// space
int N_S = power(6, N);
// Print the required
// probablity
Console.Write(N_E + " / " + N_S);
}
// Driver code
public static void Main(String[] args)
{
int N = 2;
probablityPrimeprod(N);
}
}
// This code is contributed by Princi Singh
Javascript
6 / 36
时间复杂度: O(log 2 N)
辅助空间: O(1)