Cod sursa(job #2354255)

Utilizator stratonedanielDaniel Stratone stratonedaniel Data 25 februarie 2019 08:14:20
Problema Suma si numarul divizorilor Scor 10
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

unsigned long long list[1000001];
unsigned long long primes[1000001];

int main()
{
	FILE *read=fopen("ssnd.in","r");
	FILE *write=fopen("ssnd.out","w");

	int number_of_numbers;
	int number_of_primes=0;

	fscanf(read,"%d",&number_of_numbers);
	
	for(int i=2;i<=1000000;i++)
		if(list[i]==0)
		{
			
			number_of_primes++;
			
			primes[number_of_primes-1]=i;

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

		}	
	
	unsigned long long x;
	unsigned long long sum;
	int number_of_divisors;
	

	for(int i=0;i<number_of_numbers;i++)
	{
		fscanf(read,"%llu",&x);
		sum=1+x;
		number_of_divisors=2;
		long square=(long)sqrt(x);
		int j=0;
				
		while(primes[j]<=square)
		{
			int copy=x;
			int times=1;
			
			if(copy%primes[j]==0)
			{
				number_of_divisors+=2;
				if(primes[j]!=copy/primes[j])
					sum+=primes[j]+copy/primes[j];
				else
				{
					sum+=primes[j];
					number_of_divisors--;
				}
			}		


			j++;
		}

		fprintf(write,"%d %llu\n",number_of_divisors,sum);

	}


	fclose(read);
	fclose(write);

	return 0;
}