Solving Modulo Arithmetic Problem with Variable Integer k

  • Thread starter Thread starter Mentallic
  • Start date Start date
  • Tags Tags
    Arithmetic
Click For Summary
The discussion revolves around creating a non-piecewise function for a modulo arithmetic problem involving a constant integer range [m,n] and a variable integer k. The goal is to determine the output based on the product kt, where t is the smallest integer such that kt ≥ m. If kt falls within the range [m,n], the output is kt; if kt exceeds n, the output should be n. Participants suggest using the min function to simplify the process and discuss implementing absolute value without a piecewise definition. The conversation highlights the importance of leveraging existing library functions for efficiency in programming.
Mentallic
Homework Helper
Messages
3,802
Reaction score
95
I've stumbled across an arithmetic problem that's getting the better of me, so I need your help!

I have a constant set of integers [m,n], m>0, m\neq n and a variable integer k>0. If we multiply k by successively increasing positive integers t, we will eventually get kt > m. Now, what I want is the output to be kt if kt \in [m,n] and n if kt>n.

So for example, let's consider m = 45, n = 50 and k = 8.

We get the sequence 8, 16, 24, 32, 40, 48

At this point, we have a value larger or equal to m=45, and 48 < n=50 so the output is 48.

For k=11 we have
11, 22, 33, 44, 55

Since we now have a value larger than m, but the value is also larger than n, the output needs to be n=50.

So finally, my question is, can I create a function that isn't piecewise that defines this process? The piecewise function wasn't such a big deal,

$$
f(k,m,n) =
\begin{cases}
\Big\lceil \frac{m}{k} \Big\rceil k, & \text{if}\hspace{5 mm} \Big\lceil \frac{m}{k} \Big\rceil k < n \\ \\
n, & \text{if}\hspace{5 mm} \Big\lceil \frac{m}{k} \Big\rceil k \geq n
\end{cases}
$$


But I can't figure out how to produce a non-piecewise function.
 
Physics news on Phys.org
[m,n] means the interval from m to n?

So t is the smallest integer t such that kt >=m?

You can implement min(a,b) (the smaller value of a and b) as (|a+b|-|a-b|)/2, I think that should help.
 
mfb said:
[m,n] means the interval from m to n?

So t is the smallest integer t such that kt >=m?

Yes and yes. Sorry, I should have been more clear when defining my variables.

mfb said:
You can implement min(a,b) (the smaller value of a and b) as (|a+b|-|a-b|)/2, I think that should help.

That's perfect! Thanks mfb.
 
Mentallic said:
So finally, my question is, can I create a function that isn't piecewise that defines this process?

mfb said:
You can implement min(a,b) (the smaller value of a and b) as (|a+b|-|a-b|)/2.
Now a method to implement absolute value that isn't piecewise would be needed.
 
Last edited:
Good point, but this problem was actually for a computing project of mine and since the abs(x) function already exists as a library function, its piecewise definition isn't an issue.
 
For 32 bit signed two complement integers, and assuming the compiler does an arithmetic right shifts:

#define abs(a) ((a^(a>>31))+((a>>31)&1))
 

Similar threads

  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 7 ·
Replies
7
Views
2K
Replies
7
Views
4K
Replies
10
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
12
Views
2K
  • · Replies 3 ·
Replies
3
Views
1K
  • · Replies 7 ·
Replies
7
Views
2K
Replies
9
Views
2K