Cod sursa(job #1021773)

Utilizator tavi.belu1994FMI Belu Andrei Octavian tavi.belu1994 Data 4 noiembrie 2013 10:55:41
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <cstdio>
#include <cmath>
FILE *f,*g;

#define nmax 1000010
#define modulo 9973

bool v[nmax];
int prim[nmax/2],k=0;

using namespace std;

int main(){
f=fopen("ssnd.in","r");
g=fopen("ssnd.out","w");
int t;

// ciur
int j,p=2;
while(p<nmax)
{
    if(v[p]==0)
    {
        prim[k++]=p;
        for(j=p+p; j<nmax; j+=p)
            v[j]=1;
    }
    p++;
}
long long n;
int suma,nr;
fscanf(f,"%d",&t);
for(j=1;j<=t;j++)
{
    fscanf(f,"%lld",&n);
    int p,i;
    long long q=1;
    nr=1;
    suma=1;
    for(i=0;i<k;++i)
    {
        if(prim[i]*prim[i]<=n)
        {
            if(n%prim[i])
                continue;
            p=1;
            q=prim[i];
            while(n%prim[i]==0)
            {
                n=n/prim[i];
                p++;
                q=q*prim[i];
            }
            nr=nr*p;
            suma=(suma*(q-1)/(prim[i]-1))%modulo;
        }
    }
    if (n>1)
    {
        nr=nr*2;
        suma=(suma*(n+1))%modulo;
    }
    fprintf(g,"%d %d\n",nr,suma);
}
fclose(f);
fclose(g);
return 0;
}