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