Given two numbers X and Y, the task is to find the probability that an arbitrary positive divisor of 10X is an integral multiple of 10Y.
Note: Y should be <= X.
Examples:
Input: X = 2, Y = 1
Output: 4/9
Explanation:
Positive divisors of 102 are 1, 2, 4, 5, 10, 20, 25, 50, 100. A total of 9.
Multiples of 101 upto 102 are 10, 20, 50, 100. A total of 4.
P(divisor of 102 is a multiple of 101) = 4/9.
Input: X = 99, Y = 88
Output: 9/625
Explanation:
A = 1099, B = 1088
P(divisor of 1099 is a multiple of 1088) = 9/625
Pre-requisites: Total number of divisors of a number
Approach:
In order to solve the problem, we need to observe the steps below:
- All divisors of 10X will be of the form:
(2 P * 5 Q), where 0 <= P, Q <= X
- Find the number of Prime factors of 10X
10X = 2X * 5X
- Hence, total number of divisors of 10X will be: ( X + 1 ) * ( X + 1 ).
- Now, consider all multiples of 10Y which can be potential divisors of 10X. They are also of the form:
( 2 A * 5 B ), where Y <= A, B <= X.
- So, count of potential divisors of 10X which are also multiples of 10Y is ( X – Y + 1 ) * ( X – Y + 1 ).
- Hence, required probability is (( X – Y + 1 ) * ( X – Y + 1 )) / (( X + 1 ) * ( X + 1 )). Computing the value of the expression for given values of X and Y gives us the required probability.
Below is the implementation of the above approach:
C++
// C++ program to find the probability // of an arbitrary positive divisor of // Xth power of 10 to be a multiple of // Yth power of 10 #include <bits/stdc++.h> using namespace std; #define int long long int // Function to calculate and print // the required probability void prob( int x, int y) { // Count of potential divisors // of X-th power of 10 which are // also multiples of Y-th power // of 10 int num = abs (x - y + 1) * abs (x - y + 1); // Count of divisors of X-th // power of 10 int den = (x + 1) * (x + 1); // Calculate GCD int gcd = __gcd(num, den); // Print the reduced // fraction probability cout << num / gcd << "/" << den / gcd << endl; } // Driver Code signed main() { int X = 2, Y = 1; prob(X, Y); return 0; } |
Java
// Java program to find the probability // of an arbitrary positive divisor of // Xth power of 10 to be a multiple of // Yth power of 10 import java.util.*; class GFG{ // Function to calculate and print // the required probability static void prob( int x, int y) { // Count of potential divisors // of X-th power of 10 which are // also multiples of Y-th power // of 10 int num = Math.abs(x - y + 1 ) * Math.abs(x - y + 1 ); // Count of divisors of X-th // power of 10 int den = (x + 1 ) * (x + 1 ); // Calculate GCD int gcd = __gcd(num, den); // Print the reduced // fraction probability System.out.print(num / gcd + "/" + den / gcd + "\n" ); } static int __gcd( int a, int b) { return b == 0 ? a : __gcd(b, a % b); } // Driver code public static void main(String[] args) { int X = 2 , Y = 1 ; prob(X, Y); } } // This code is contributed by amal kumar choubey |
Python3
# Python3 program to find the probability # of an arbitrary positive divisor of # Xth power of 10 to be a multiple of # Yth power of 10 from math import * # Function to calculate and print # the required probability def prob(x, y): # Count of potential divisors # of X-th power of 10 which are # also multiples of Y-th power # of 10 num = abs (x - y + 1 ) * abs (x - y + 1 ) # Count of divisors of X-th # power of 10 den = (x + 1 ) * (x + 1 ) # Calculate GCD gcd1 = gcd(num, den) # Print the reduced # fraction probability print (num / / gcd1, end = "") print ( "/" , end = "") print (den / / gcd1) # Driver Code if __name__ = = '__main__' : X = 2 Y = 1 prob(X, Y) # This code is contributed by Surendra_Gangwar |
C#
// C# program to find the probability // of an arbitrary positive divisor of // Xth power of 10 to be a multiple of // Yth power of 10 using System; class GFG{ // Function to calculate and print // the required probability static void prob( int x, int y) { // Count of potential divisors // of X-th power of 10 which are // also multiples of Y-th power // of 10 int num = Math.Abs(x - y + 1) * Math.Abs(x - y + 1); // Count of divisors of X-th // power of 10 int den = (x + 1) * (x + 1); // Calculate GCD int gcd = __gcd(num, den); // Print the reduced // fraction probability Console.Write(num / gcd + "/" + den / gcd + "\n" ); } static int __gcd( int a, int b) { return b == 0 ? a : __gcd(b, a % b); } // Driver code public static void Main( string [] args) { int X = 2, Y = 1; prob(X, Y); } } // This code is contributed by AnkitRai01 |
Javascript
<script> // JavaScript program to find the probability // of an arbitrary positive divisor of // Xth power of 10 to be a multiple of // Yth power of 10 // Function to calculate and print // the required probability function prob(x, y) { // Count of potential divisors // of X-th power of 10 which are // also multiples of Y-th power // of 10 var num = Math.abs(x - y + 1) * Math.abs(x - y + 1); // Count of divisors of X-th // power of 10 var den = (x + 1) * (x + 1); // Calculate GCD var gcd = __gcd(num, den); // Print the reduced // fraction probability document.write(num / gcd + "/" + den / gcd + "\n" ); } function __gcd(a, b) { return b == 0 ? a : __gcd(b, a % b); } // Driver Code var X = 2, Y = 1; prob(X, Y); // This code is contributed by Khushboogoyal499 </script> |
4/9
Time Complexity: O(log(N))
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!