Mutability issue

Menjanahary R. R. megnany at afaky.com
Sat Mar 23 19:30:29 UTC 2024


The next code works as is but ...

```
import std.stdio;
import std.traits;

bool isPrime(T)(T n) if (isIntegral!T) {
     if (n <= T(3)) return n > T(1);

     if (n % T(2) == T(0) || n % T(3) == T(0)) return false;

     for (T candidate = T(5); candidate * candidate <= n; 
candidate += T(6)) {
         if (n % candidate == T(0) || n % (candidate + T(2)) == 
T(0)) {
             return false;
         }
     }

     return true;
}

T nextPrime(T)(T n) if (isIntegral!T) {
     if (n < T(2))
         return T(2);

     T candidate = (n % T(2) == T(0)) ? n + T(1) : n + T(2); // 
Start from next Odd

     for (;; candidate += T(2)) { // Skip even
         if (isPrime(candidate)) {
             return candidate;
         }
     }
}

void main() {
     int num = 10; // Example starting number
     writeln("\nNext prime after ", num, " is ", nextPrime(num));
}
```

... it doesn't at all once I change `int num = 10;` to `const int 
num = 10;`. I'm confused

How to fix it?


More information about the Digitalmars-d-learn mailing list