I am really new concerning loop invariants and I am currently trying to figure out a loop invariant of an algorithm for prime numbers. I tried a lot of ideas, but I still have problems since there are two nested loops. I am also really grateful if someone have any tips regarding finding a loop invariant. My idea is that all $i$ which are primes are set on true and all $i$ which are not primes are set on false.. but I don't think that this is the loop invariant.
PRIME_FILTER(n)
1 P = INIT(n) // Initialize array P[1::n] with True
2 P[1] = False
3 i = 2
4 while i * i <_ n
5 if P[i] == True
6 j = i * i
7 while j <_ n
8 P[j] = False // Not prime
9 j = j + i
10 i = i + 1
11 return P