Cod sursa(job #1241338)

Utilizator ducu34Albastroiu Radu Gabriel ducu34 Data 13 octombrie 2014 12:43:24
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#define mare 1000001
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long n,x,geometrica,numar; 
int i,j,suma,t,p,m,OK,k,X[mare],viz[mare];
int main()
{
    fin>>t;
    for(i=2;i<=mare;i++)
    {
        if(viz[i]==0)
        {
            for(j=2;i*j<=mare;j++)
                viz[i*j]=1;
            X[++k]=i;
        }
    }
    for(i=1;i<=t;i++)
    {
        fin>>n;
        x=n;
        numar=suma=1;OK=1;
		for(j=1;1LL*X[j]*X[j]<=x && j<=k;j++)
		{
			if(x%X[j]==0)
			{
				p=0;
				while(x%X[j]==0)
				{
					x=x/X[j];
					p++;
				}
				geometrica=1;
				numar=numar*(p+1)%9973;
				for(m=1;m<=p+1;m++)
					geometrica=geometrica*X[j];
				geometrica--;
				geometrica=geometrica/(X[j]-1)%9973;
				suma=suma*geometrica%9973;
			}
		}
        if(x!=1)
        {
            numar=numar*2%9973;
            suma=suma*(x+1)%9973;
        }
        fout<<numar<<" "<<suma<<"\n";
    }
    return 0;
}