Files
common/examples/primes.cm
2026-03-14 14:14:37 -04:00

69 lines
1.5 KiB
Plaintext

// Public domain / CC0. Use freely for any purpose. RoyR 2026
// primes.cm - Prime number calculator
// Demonstrates: algorithms, loops, mathematical operations
void printf(uint8 *fmt);
int32 is_prime(int32 n) {
if (n <= 1) return 0;
if (n <= 3) return 1;
if (n % 2 == 0 || n % 3 == 0) return 0;
int32 i = 5;
while (i * i <= n) {
if (n % i == 0 || n % (i + 2) == 0) {
return 0;
}
i = i + 6;
}
return 1;
}
int32 nth_prime(int32 n) {
if (n == 1) return 2;
int32 count = 1;
int32 candidate = 3;
while (count < n) {
if (is_prime(candidate)) {
count = count + 1;
}
candidate = candidate + 2;
}
return candidate - 2;
}
int32 count_primes_under(int32 limit) {
int32 count = 0;
for (int32 i = 2; i < limit; i = i + 1) {
if (is_prime(i)) {
count = count + 1;
}
}
return count;
}
int32 main(void) {
printf("First 20 prime numbers:\n");
for (int32 i = 1; i <= 20; i = i + 1) {
printf("%d ", nth_prime(i));
if (i % 10 == 0) printf("\n");
}
printf("\n");
int32 limit = 100;
int32 count = count_primes_under(limit);
printf("\nThere are %d primes less than %d\n", count, limit);
printf("\nPrime check:\n");
int32 test_nums[8] = { 1, 2, 15, 17, 97, 100, 101, 121 };
for (int32 i = 0; i < 8; i = i + 1) {
int32 num = test_nums[i];
printf(" %d is %s\n", num, is_prime(num) ? "prime" : "not prime");
}
return 0;
}