Cod sursa(job #982728)

Utilizator mlupseLupse-Turpan Mircea mlupse Data 9 august 2013 19:46:28
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
using namespace std;
#include<cstdio>
#include<bitset>
#define MAX 1000005
#define MAX2 78600
#define MOD 9973
bitset <MAX> ciur;
int prim[MAX2];
void ciur_er()
{
    int i,j,k=1;
    prim[k]=2;
    for(i=3;i<MAX-1;i=i+2)
        if(!ciur[i])
        {
            prim[++k]=i;
            for(j=i+i+i;j<MAX-1;j=j+i+i)
                ciur[j]=1;
        }
}
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    int T,c,i,S;
    long long nrd,P,n,m;
    ciur_er();
    scanf("%lld",&T);
    while(T--)
    {
        scanf("%lld",&n);
        nrd=1;
        S=1;
        for(i=1;prim[i]*prim[i]<=n;i++)
        {
            m=n;
            c=1;
            while(n%prim[i]==0)
            {
                n=n/prim[i];
                c++;
            }
            nrd=nrd*c;
            P=(1LL*m/n*prim[i]-1)/(prim[i]-1);
            S=(1LL*S*P)%MOD;
            }
        if(n!=1)
        {
            nrd=nrd*2;
            S=(1LL*S*(n+1))%MOD;

        }
        printf("%lld %d\n",nrd,S);
    }
    return 0;
}