I would like to figure out how many ways there are to create product pairs equal to or less than a certain number. In other words, find a pair of integers $(n,m)$ such that $nm \le N$ for a given integer $N$.
I'm creating a math game and I have an idea for how to adjust the difficulty. In the preferences, you can set a maximum value $N$ for the answers. For the multiplication problems, I want to be able to control the number of $0\times n$, $n \times 0$, $1\times n$ and $n \times 1$ problems.
My plan is to do it by adjusting the frequency of those types of problems. I can calculate the number of the the other types of problems, but I can't calculate their frequency without knowing the total number of possible multiplication problems $n\times m \le N$.
For the ones I gave, the numbers are, for a maximum answer of N:
Including 0 as a factor: $2N+1$
Including 1 as a factor: $2N-1$
Doubles, such as $n \times n$: N even: $\frac{N+2}{2}$ N odd: $\frac{N+1}{2}$
My question is similar to two others, but these do not have complete or general answers:
Number of ordered pairs $(a,b)$ such that $ab \le 3600$
Number of pairs with product less than a given number.
An analytical solution is given here, but no explanation so I'm not sure if it is right or not.
Following up on the accepted answer. Here is the comparison between actual and $N\log{N}$:
N Actual Number N*Log(N)
1 1 0.00
2 3 1.39
4 8 5.55
8 20 16.64
16 50 44.36
32 119 110.90
64 280 266.17
128 645 621.06
256 1466 1419.57
512 3280 3194.02
1024 7262 7097.83
2048 15937 15615.22
4096 34720 34069.57
My matlab code is:
% scriptCountNumProducts.m
s = sprintf(' N\t\tActual Number\t\tN*Log(N)');
disp(s);
for q = 0:12
N = 2^q;
count = 0;
for n=1:N
for m = 1:N
product = m*n;
if product <= N
count = count + 1;
end
end
end
s = sprintf(...
'%4d \t\t%5d\t\t\t%0.2f',N, count, N*log(N)...
);
disp(s);
end