Cod sursa(job #2353772)

Utilizator stratonedanielDaniel Stratone stratonedaniel Data 24 februarie 2019 16:16:04
Problema Ciurul lui Eratosthenes Scor 30
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>

void do_nothing(int null)
{}

int main()
{

	int N;

	FILE *read=fopen("ciur.in","r");
	FILE *write=fopen("ciur.out","w");
	int null;

	null=fscanf(read,"%d",&N);

	do_nothing(null);
	
	int *marked=(int*)calloc(N+1,sizeof(int));

	int number_of_primes=0;
	int first_unchecked=2;


	if(N==1)
		fprintf(write,"%d\n",0);
	else
	{
		marked[2]=1;
		number_of_primes++;

		while(first_unchecked<=N)
		{
			for(int i=first_unchecked;i*first_unchecked<=N;i++)
				marked[i*first_unchecked]=1;			
		
			while(first_unchecked<=N+1)
			{
				if(marked[first_unchecked]==0)
					break;

				first_unchecked++;
			}

			if(first_unchecked==N+1)
				break;

			marked[first_unchecked]=1;			
		
			number_of_primes++;

		}


	}

	fprintf(write,"%d\n",number_of_primes);

	free(marked);
	fclose(read);
	fclose(write);

	return 0;
}