http://www.codechef.com/IOPC2014/problems/IOPC14A
What is the way to solve this problem? Most of solutions seems to check (n!mod (2*b))>=b or not ,whats the reason for this?
| # | User | Rating |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | Kevin114514 | 3603 |
| 4 | jiangly | 3583 |
| 5 | strapple | 3515 |
| 6 | tourist | 3470 |
| 7 | dXqwq | 3436 |
| 8 | Radewoosh | 3415 |
| 9 | Otomachi_Una | 3413 |
| 10 | Um_nik | 3376 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 158 |
| 2 | adamant | 152 |
| 3 | Proof_by_QED | 146 |
| 3 | Um_nik | 146 |
| 5 | Dominater069 | 144 |
| 6 | errorgorn | 141 |
| 7 | cry | 139 |
| 8 | YuukiS | 135 |
| 9 | chromate00 | 134 |
| 9 | TheScrasse | 134 |
http://www.codechef.com/IOPC2014/problems/IOPC14A
What is the way to solve this problem? Most of solutions seems to check (n!mod (2*b))>=b or not ,whats the reason for this?
| Name |
|---|



You can calc the power of 2 in n!(it's n/2+n/4+n/8+...) and power of 2 in b(just divide it by 2 while n%2=0) and compare this values
vintage_Vlad_Makeev your idea is wrong probably because it's integer division. For eg:
a) 12 = 22 * 3 , 8 = 23, (12 / 8 = 1) % 2 = 1
b) 20 = 22 * 5 , 8 = 23, (20 / 8 = 2) % 2 = 0
But powers of 2 in (12, 8) and (20, 8) are same. You could find a similar case for factorials as well.
Each student gets n! / b (integer division) oranges. If n!%(2b) is less than b, then it can be written as 2*k*b + r for some integer k and r < b. Then n!/b is equal to 2*k, so each student gets an even number of oranges. If n!%(2b) is >= b, then it can be written as 2*k*b + r where b <= r < 2*b, or 2*k*b + b + r', where r' = r — b, so 0 <= r' < b. Then, (2*k*b + b + r')/b = 2*k + 1, which is odd.
one more doubt
The above code seems to be finding (a*b)%m ,but we can do directly right .then why coders do so?
Doing it directly could result in overflow.
but can (a%m)*(b%m)%m cause overflow?
Yes because they can both be up to m-1, and m can be up to 10^18
u r so fast in helping ,ty
one more doubt if i dont write long double it gives wa ~~~~~ (long long)((long double)a * (long double)b / (long double)m); ~~~~~
and
whats difference
Long doubles are more precise than doubles, and long longs have a higher range of values than longs.