Remainder Quotient – Find all combinations between n & m
Andrew and James are best friends and are fond of puzzles. Andrew challenged James to solve a mathematical problem and promised him to pay $100 if he gives the correct answer.
The problem is that James will be given T pairs of (n,m). Now, all the combinations of all the numbers between n and m(including limits) are taken two at a time.
The left digit in the combination is divided by the right digit in the combination. If the quotient is greater than 1 then the quotient is taken into further consideration.
Frequency of the quotients (greater than 1) is counted and the frequencies greater than1 are added giving the final answer.
Write a code for James to help him make the calculation and win $100.
Explanation
For T number of test cases you are given two numbers n,m .
Find the total number of pairs(a,b) having integral part of quotient greater than 1,where quotient=a/b.
CONSTRAINTS:
1<=T<=10^5
1<=n<=m<=10^5
Sample Input:
2
2 6
2 15
Sample Output:
3
42
Detailed Explanation
2 is the number of test cases.
2,6 and 2,15 are the two test cases.
consider the first test case 2,6
All the numbers between 2 & 6 are considered (including 2 and 6) and pairs are formed:
(2,3) (2,4) (2,5) (2,6)
(3,2) (3,4) (3,5) (3,6)
(4,2) (4,3) (4,5) (4,6)
(5,2) (5,3) (5,4) (5,6)
(6,2) (6,3) (6,4) (6,5)
All the left digits in pair are divided by the right digit in the pair.
0 0 0 0
1 0 0 0
2 1 0 0
2 1 1 0
3 2 1 1
Quotients greater than 1 are considered.
2, 2, 3, 2
Frequency of (2) = 3
Frequency of (3) = 1
Since, we have to consider the frequencies > 1
Hence, we will ignore Frequency of (3) i.e. = 1
And sum all the other Frequencies that are > 1
The Frequencies > 1 are 3 (i.e Frequency of 2)
Therefore, answer is 3 for the first test case.
Time Limit:3.0 sec(s) for each input file.
Memory Limit:256 MB
Source Limit:1024 KB
SOURCE CODE IN PYTHON : :
import math
for i in range(input()):
n,m=map(int,raw_input().split())
if m/2 <= n:
print 0
continue
k=m/2-n
j=int(math.ceil(m/2.0))-n
a=(k+1)*(j+1)
if m%2==0 or (m-n)%2==0:
a-=1
print a
OUTPUT : :
>
>> ================= RESTART: C:\Users\Second.py ================= 3 2 15 42 2 7 6 2 5000 6245000 >>>
SOURCE CODE IN C++ : :
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
long long int i,n,m,t,p,count,sum,e,s,d;
cin>>t;
for(i=0;i<t;i++)
{
sum=0;
e=0;
cin>>n>>m;
p=(m-n)*(m-n+1);
long long int arr[p/2];
s=n+1;
d=n;
while(s<=m)
{
if(s==d)
{
s++;
d=n;
}
else if(s/d==1)
{
d++;
}
else
{
arr[e]=s/d;
e++;
d++;
}
}
int freq[e];
std::memset(freq,-1,e*sizeof(int));
for(int x=0; x<e; x++)
{
count = 1;
for(int y=x+1; y<e; y++)
{
if((arr[x]>1)&&(arr[x]==arr[y]))
{
count++;
freq[y] = 0;
}
}
if(freq[x]!=0)
{
freq[x] = count;
}
if(freq[x]>1)
{
sum=sum+freq[x];
}
}
cout<<sum<<endl;
}
return 0;
}
OUTPUT : :
3 2 6 3 2 20 80 2 100 2400 Process returned 0