Help me about loop invariant of LCM

  • Context: Graduate 
  • Thread starter Thread starter flying2000
  • Start date Start date
  • Tags Tags
    Invariant Loop
Click For Summary
SUMMARY

The discussion focuses on the loop invariant of an algorithm designed to compute the least common multiple (LCM) of two integers, m and n. The algorithm initializes variables a and b to m and n, respectively, and iteratively increments them until they are equal, at which point a equals the LCM(m, n). The established loop invariant is that at each iteration, a is a multiple of m and b is a multiple of n, which can be proven by induction. The proposed invariant lcm(ak, bk) = lcm(ak/m, bk/n) * lcm(m,n) is invalid as it does not accurately represent the relationship between a and b during the iterations.

PREREQUISITES
  • Understanding of least common multiple (LCM) concepts
  • Familiarity with algorithmic proof techniques, particularly induction
  • Basic knowledge of while loops and conditional statements in programming
  • Experience with integer arithmetic and multiples
NEXT STEPS
  • Study the principles of mathematical induction for algorithm proofs
  • Learn about different algorithms for calculating LCM, such as the Euclidean algorithm
  • Explore loop invariants in depth to understand their role in algorithm correctness
  • Investigate the implementation of LCM algorithms in programming languages like Python or Java
USEFUL FOR

Students, computer science enthusiasts, and software developers interested in algorithm design and analysis, particularly those focusing on number theory and optimization techniques.

flying2000
Messages
40
Reaction score
0
please help me, i was stuck in here 2 days!
algorithm to prove lcm:

a:=m
b:=n
while a != b
if a < b
a:= a + m
else
b:= b + n

//postcondition: a is the lcm(m,n)

what's the loop invariant?I thought it is(not sure):
lcm(ak, bk) = lcm(ak/m, bk/n) *lcm(m,n)
I am not sure and also impossible to prove my loop invariant...
 
Physics news on Phys.org
Forget it! problem soloved ...

Forget it! problem soloved ... :smile:
 


The loop invariant in this algorithm is the fact that at each iteration, the value of a is a multiple of m and the value of b is a multiple of n. This can be proven by induction.

At the beginning of the loop, a and b are initialized to m and n respectively, which are both multiples of themselves. So the invariant holds true for the first iteration.

Assuming the invariant holds true for the kth iteration, we can show that it also holds true for the (k+1)th iteration. If a < b, then a will be incremented by m, which is a multiple of m. Similarly, if b < a, then b will be incremented by n, which is a multiple of n. So in both cases, the invariant holds true for the (k+1)th iteration.

Finally, when the loop terminates, we have a = lcm(m,n), which is a multiple of both m and n. Therefore, the loop invariant also holds true for the postcondition.

Regarding the loop invariant that you have suggested, lcm(ak, bk) = lcm(ak/m, bk/n) * lcm(m,n), it is not a valid invariant for this algorithm. This is because at each iteration, the values of a and b are not necessarily equal to ak/m and bk/n respectively. They are only incremented by m and n, but their initial values are still m and n. Therefore, the original loop invariant holds true in this case.
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 2 ·
Replies
2
Views
5K
  • · Replies 7 ·
Replies
7
Views
8K
  • · Replies 6 ·
Replies
6
Views
9K
  • · Replies 0 ·
Replies
0
Views
2K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 41 ·
2
Replies
41
Views
5K