3
$\begingroup$

I divide a value and if the remainder is not 0 I want the closest possible divisor without remainder.

Example:

I have:
$100 \% 48 = 4$

Now I am looking for the next value which divide 100 wihtout remainder. Result: $50$
$100 \% 50 = 0%$

Just another example:
$14 \% 6 = 2$
Result $7$
$14 \% 7 = 0$

Does anyone know how to calculate this?

$\endgroup$
4
  • $\begingroup$ It seems that you know how to calculate this. Are you looking for some other way to calculate it? $\endgroup$ – vadim123 Mar 17 '14 at 15:20
  • $\begingroup$ No, I don´t know. My "results" are just guessed. $\endgroup$ – Viatorus Mar 17 '14 at 15:22
  • 2
    $\begingroup$ If there were an easy way of doing this in general we'd be able to factorise large numbers using the method. And no-one knows an easy way to do that. $\endgroup$ – Mark Bennet Mar 17 '14 at 16:12
  • $\begingroup$ Isn't there an easy way to do this? I'm confused. $\endgroup$ – bozdoz Sep 13 '18 at 19:28
1
$\begingroup$
  1. Calculate 100%48. If the answer is zero, stop. Otherwise:
  2. Calculate 100%49. If the answer is zero, stop. Otherwise:
  3. Calculate 100%50. If the answer is zero, stop. Otherwise:

etc.

$\endgroup$
3
  • $\begingroup$ doing so you'll find an integer $ x \text{ such that } x \equiv 0 \text{ mod } M$, but not the nearest...e.g maybe it was $47$ $\endgroup$ – sirfoga Mar 17 '14 at 15:26
  • 1
    $\begingroup$ Okay, well I hoped there is a better way to calculate this. But thank you anyway. $\endgroup$ – Viatorus Mar 17 '14 at 15:26
  • $\begingroup$ If you want the nearest and allow those less than 48, then try: 48, 49, 47, 50, 46, 51, 45, etc. $\endgroup$ – vadim123 Mar 17 '14 at 15:29
5
$\begingroup$

I had the same question when I found this, so here's some sample (python) code that would find the nearest divisor with no remainder.

Num = 636         # Numerator we are seeking to divide with no remainder
Den = 8           # Initial denominator
max_iters = 15    # caps the maximum loops
iters = 1         # initialize counter
Deni = Dend = Den # vars for searching increasing and decreasing denominators

while Num%Den != 0:
Deni +=1                 # searching increased vals
if Dend > 0 : Dend -=1   # searching decreased vals, but check 0 condition
if Num%Dend ==0:         # found a 0 remainder denominator
    Den = Dend           # assign found denominator
    break
elif Num%Deni ==0:       # found a 0 remainder denominator
    Den = Deni           # assign found denominator
    break
elif iters >= max_iters: # check loop count
    break
iters+=1

Not as clean as a built in function, but hopefully it helps the next person.

$\endgroup$

Not the answer you're looking for? Browse other questions tagged or ask your own question.