Cod sursa(job #687165)

Utilizator KoniacDocea Andrei Koniac Data 22 februarie 2012 10:06:21
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<stdio.h>
#include<algorithm>
#include<math.h>
#define lim 1000001

FILE *f =fopen("ssnd.in","r");
FILE *g =fopen("ssnd.out","w");

int t;
long long n;
int prim[lim];
long long nrp[lim];

void ceva(long long n){
	int putere,p,suma=1;
	int nrdiv=1;
	int r=n;
	for(int i=1;nrp[i]*nrp[i]<=r;i++){
		if(n%nrp[i]==0){
			p=nrp[i];
			putere=1;
			while(n%nrp[i]==0){
				p*=nrp[i];
				n/=nrp[i];
				putere++;
			}
			nrdiv*=putere;
			suma*=(p-1)/(nrp[i]-1)%9973;
		}
	}
	if(n!=1){
		suma*=(n*n-1)/(n-1)%9973;
		nrdiv*=2;
	}
	fprintf(g,"%d %d\n",nrdiv, suma);
}

int main(){
	fscanf(f,"%d",&t);
	for(int i=2;i<=lim;i++)
		if(prim[i]==0)
			for(int j=i+i;j<=lim;j+=i)
				prim[j]=1;
	int k=0;
	for(int i=2;i<=lim;i++)
		if(!prim[i])
			nrp[++k]=i;
		
	for(int i=1;i<=t;i++){
		fscanf(f,"%lld",&n);
		ceva(n);
	}

	fclose(f);
	fclose(g);
	
	return 0;
}