Skip to main content

Checking a fraction x/y contains infinite number of numerals after the decimal point

Infinite fractions \[ \text{When is }\ x \mid y \text{ ?} \ \] x can be represent as
\[ {x} = \prod_{i=1}^n p_{i}^{k} \] \[ \text{where}\ p_{i} =\text{ is a prime factor of } {x} \text{ and } {x} \text{ has } {n} \text{ prime factors.} \] \[ \text{Example: }\ {x} = {12} = {2}^{2} \times {3} \]
We can represent the y by the same way. x divides y ( x is a divisor of y ) if and only if all prime factors of x are available in y prime factorization and each prime factor (p) power (p^a) in x factorization is less than equal to prime factor (p) power (p^b) in y factorization (a <= b).
Or we can say that when GCD(x, y) = x  , x divides y.
\[ \text{When is }\ x\nmid y \text{ ?} \ \]
y = q * x + r [ where r < x ]
When reminder (r) is not equal to 0, y is not divisible by x. 
Only when r is not equal to zero there are numbers after the decimal point of fraction p/q.
How to get numbers after the decimal point of a fraction ?
We recursively do it until MOD = 0.
initially MOD = y % x. [ % means modulus ]
Suppose numbers after decimal point is D.
Then, D = ( MOD * 10 ) / x. [ we are dealing only decimal numbers now ]
And, MOD = ( MOD * 10 ) % x.

So, x/y contains finite numbers of numerals after the decimal point When all the prime factors which are not available in y factorization or prime power is greater than y factorization but  available in 10 factorization{2,5}.

Related problem : A. Finite or not?
Solution :

Comments

Popular posts from this blog

Gray Code

A Gray code is a list of all 2^n  bit strings of length , where any two successive strings differ in exactly one bit (i.e., their Hamming distance is one).  source   The problem is, how to generate Gray Code for a given length n.  When n = 2 , Gray Code :  00  01  11  10 When n = 3, Gray Code : 000 001 011 010 110 111 101 100 000(0) position Gray code string 000  001(1) -> 001  010(2) -> 011  011(3) -> 010 .....  Key observation -  For the  K position, the Gray code string is S .   if i and (i+1)- th bit of K is equal then i- th char of S will be  ' 0 ', otherwise, it will be ' 1 '.   Code :               int n; cin >> n;     for(int i = 0; i < (1 << n); i++) {         int value =  ( i ^ (i >> 1) ) ;         string s = "";         for(int j =...

Histogram - LOJ

It's a well-known problem and the well-known solution is using a stack. I tried to solve it by segment tree( iterative version for building tree ) and got TLE. Hope I can optimize the code.  TLE CODE 

Codeforces Global Round 6

Codeforces Global Round 6 A. Competitive Programmer According to the problem statement you are given some digits ( 0 - 9 ) , is it possible to make a number using all digits which is divisible by 60 ? To make a number from the digits which is divisible by 60, we need a zero and more than one even digits and digits sum must be divisible by 3. Code : B. Dice Tower According to the the picture given in the problem the sum of any two oppsite side of the dice is 7. Accept top dice , sum of all visible side pips in a dice is 21 - 7 = 14. We can make a tower , which all visible pips is equal to n , if n = 14 * d + 14 + pip n = 14 * D + pip where pip = { 1, 2, 3, 4, 5, 6 } Code :