Cod sursa(job #2439369)

Utilizator stratonedanielDaniel Stratone stratonedaniel Data 15 iulie 2019 18:51:15
Problema Suma si numarul divizorilor Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>
#include <math.h> 

#define null NULL 
#define in "ssnd.in" 
#define out "ssnd.out" 

FILE *read,*write; 

int number_of_primes = 0;
int primes[1000001];
int visited[1000001];

int N = 0;
int number_of_divisors, sum_of_divisors;
int current_number;

void CiurulLuiEratosthenes()
{
	for (int i = 2; i <= 1000000; i++)
	{
		if(visited[i] == 0)
		{
			primes[number_of_primes ++] = i;

			for (int j = i; j <= 1000000; j = j + i)
				visited[j] = 1;
		}
	}
}

int main(void) 
{
 	read = (FILE *)fopen(in, "r");
 	write = (FILE *)fopen(out, "w");
 
 	fscanf(read, "%d", &N);

 	CiurulLuiEratosthenes();

 	for (int i = 0; i < N; i++)
 	{
 		fscanf(read, "%d", &current_number);
 		int square_root = sqrt(current_number);
 		int j = 0;
 		sum_of_divisors = current_number + 1;
 		number_of_divisors = 2;

 		while (primes[j] <= square_root && j < number_of_primes)
 		{
 			if (current_number % primes[j] == 0)
 			{
 				number_of_divisors ++;
 				sum_of_divisors += primes[j];

 				if ((current_number / primes[j]) != primes[j])
 				{
 					number_of_divisors ++;
 					sum_of_divisors += (current_number / primes[j]);
 				}

 			}
 			j++;
 		}

 		fprintf(write, "%d %d\n", number_of_divisors, sum_of_divisors % 9973);

 	}
 
 	fclose(read);
 	fclose(write);
 
 	return 0;
 }