Cod sursa(job #2782601)

Utilizator ptlsebiptl sebi ptlsebi Data 12 octombrie 2021 19:19:43
Problema Ciurul lui Eratosthenes Scor 10
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <stdint.h>
#include <math.h>

void read_uint32_t(FILE *__restrict stream, uint32_t *__restrict nr) {
  uint8_t ch;
  *nr = 0;
  while ((ch = fgetc(stream)) && ('0' <= ch && ch <= '9')) {
    *nr *= 10;
    *nr += ch - '0';
  }
  if (ch == '\r') {
    fgetc(stream);
  }
}

uint32_t a[2000001];

void ciur(uint32_t lim) {
  uint32_t i, j;
  uint32_t sqlim = sqrt(lim);
  for(i = 4; i <= lim; i+=2) {
    a[i] = 1;
  }
  for(i = 3; i <= sqlim; i+=2) {
    if (a[i] == 0) {
      for(j = i*i; j <= lim; j+= 2*i) {
        a[i] = 1;
      }
    }
  }
}

int main(void) {
  uint32_t nprim = 1;
  uint32_t lim = 0;
  {
    FILE *__restrict in = fopen("ciur.in", "r");

    read_uint32_t(in, &lim);

    fclose(in);
  }
  ciur(lim);
  {
    int32_t i;
    for(i = 3; i <= lim; i+=2) {
      if (a[i] == 0) {
        ++nprim;
      }
    }
  }
  {
    FILE *__restrict out = fopen("ciur.out", "w");

    fprintf(out, "%u", nprim);

    fclose(out);
  }
  return 0;
}