For a problem on Codechef - https://www.codechef.com/problems/CHFING,
I submitted two programs that differs only on a part where a division occurs.
1st Solution CodeChef: Practical coding for everyone
import math
MOD = 1000000007
test = int(input())
for _ in range(test):
n,k = map(int, input().split())
first=k-1;
diff=n-1;
t = (first+diff)//(diff)
y=(2*(first)-(t-1)*(diff))
ans = (y*t)//2;
ans = ans%MOD
print(ans)
2nd Solution CodeChef: Practical coding for everyone
import math
MOD = 1000000007
test = int(input())
for _ in range(test):
n,k = map(int, input().split())
first=k-1;
diff=n-1;
t = int((first+diff)/(diff))
y=(2*(first)-(t-1)*(diff))
ans = (y*t)//2;
ans = ans%MOD
print(ans)
solution #1 passed all test cases but solution #2 fails for one test case.
The only difference is on line #8 where t is calculated as t = (first+diff)//(diff)
in the 1st solution and t = int((first+diff)/(diff))
in the 2nd solution.
Note that inputs are always integer, so variables first
and diff
are ints. And the code is in Python 3.6.
So does python returns different for x//y and int(x/y)? Or am I missing something else? Can someone kindly point me out why the second solution gives WA?
Edit: I came to know that these two are different for negative numbers. (https://stackoverflow.com/questions/56816677/does-x-y-and-intx-y-return-same-results-in-python). But input for this problem is non-negative and hence the variables first and diff also.
Edit #2: python - What is the difference between '/' and '//' when used for division? - Stack Overflow
the division operator behaves abnormally generally for numbers greater than 10 ^ 17.
x = 10000000000000000000006
if x / 2 == x // 2:
print("Hello")
else:
print("World")
For the above code, World will be printed and not Hello. This is because 10000000000000000000006 / 2 will return 5e + 21, but 10000000000000000000006 // 2 will return the correct answer 5000000000000000000003. Even int(10000000000000000000006 / 2) will return 5000000000000000000000, which is incorrect.