Cod sursa(job #405789)

Utilizator freak93Adrian Budau freak93 Data 28 februarie 2010 19:13:38
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#include<bitset>

using namespace std;

const char iname[]="ssnd.in";
const char oname[]="ssnd.out";
const int maxn=1000005;
const int mod=9973;

ifstream f(iname);
ofstream g(oname);

bitset<maxn> a;

int p[maxn],i,n;

long long x,j,k,s,nr,v,r;

int main()
{
    f>>n;
    for(j=2;j<maxn;++j)
        if(a[j]==0)
        {
            p[++k]=j;
            for(s=j*j;s<maxn;s+=j)
                a[s]=1;
        }
    for(i=1;i<=n;++i)
    {
        f>>x;
        nr=1;
        s=1;
        for(j=1;p[j]*p[j]<=x;++j)
        {
            v=0;r=1;
            while(x%p[j]==0)
                x/=p[j],r*=p[j],++v;
            nr*=v+1;
            s*=(r*p[j]-1)/(p[j]-1);
            s%=mod;
        }
        if(x>1)
            nr*=2,s*=x+1,s%=mod;
        g<<nr<<" "<<s<<"\n";
    }

    f.close();
    g.close();

    return 0;
}