| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
- // Exceptions. See /LICENSE for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- import Core library "io";
- // Compute and return the number of primes less than 1000.
- class Sieve {
- fn Make() -> Sieve {
- returned var s: Sieve;
- // TODO: `for` loop.
- var n: i32 = 0;
- while (n < 1000) {
- s.is_prime[n] = true;
- ++n;
- }
- return var;
- }
- fn MarkMultiplesNotPrime[addr self: Self*](p: i32) {
- var n: i32 = p * 2;
- while (n < 1000) {
- self->is_prime[n] = false;
- n += p;
- }
- }
- var is_prime: [bool; 1000];
- }
- fn Run() -> i32 {
- var s: Sieve = Sieve.Make();
- var number_of_primes: i32 = 0;
- var n: i32 = 2;
- while (n < 1000) {
- if (s.is_prime[n]) {
- ++number_of_primes;
- Core.Print(n);
- s.MarkMultiplesNotPrime(n);
- }
- ++n;
- }
- return number_of_primes;
- }
|