Cod sursa(job #957410)

Utilizator radu33Nesiu Radu radu33 Data 4 iunie 2013 22:46:10
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>
#define lmax 1000005
using namespace std;
int prime[lmax];
bool use[lmax];
int main()
{
    int i,n,l=0;
    long long x;
    for(i=2;i<lmax;i++)
        if(!use[i])
        {
            prime[l++]=i;
            for(int j=i+i;j<lmax;j+=i)
                use[j]=1;
        }
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d",&n);
    while(n--)
    {
        scanf("%lld",&x);
        int nr=1,s=1;
        for(i=0;i<l && prime[i]<=x/prime[i];i++)
            if(x%prime[i]==0)
            {
                long long aux=x;
                int k=0;
                while(x%prime[i]==0)
                {
                    k++;
                    x/=prime[i];
                }
                aux/=x;
                aux*=prime[i];
                aux--;
                s=(s*(aux/(prime[i]-1)))%9973;
                nr*=k+1;
            }
        if(x>1)
        {
            s=(s*(x+1))%9973;
            nr*=2;
        }
        printf("%d %d\n",nr,s);
    }
    return 0;
}