Cod sursa(job #988297)

Utilizator classiusCobuz Andrei classius Data 22 august 2013 14:26:16
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

long long pw(long long x,long long y){

    if(!y) return 1;
    long long ax=pw(x,y/2);
    return (y%2 ? x : 1)*ax*ax;
}

int main()
{
    int t;
    bool ok[1000001]={};
    vector<long long> pr;

    ok[1]=1;

    for(int i=2;i<1000001;i++)
        if(!ok[i]){
            pr.push_back(i);
            for(int j=2;i*j<1000001;j++)
                ok[i*j]=1;
        }

    f>>t;

    while(t--){
        long long nrd=1,sd=1;
        int x;
        f>>x;

        for(unsigned j=0;j<pr.size()&&pr[j]*pr[j]<=x&&x!=1;j++){
            if(x%pr[j]==0){
                long long axn=0;
                while(x%pr[j]==0){
                    x/=pr[j];
                    axn++;
                }
                nrd*=axn+1;
                sd*=(pw(pr[j],axn+1)-1)/(pr[j]-1);
                sd%=9973;
            }
        }
        if(x!=1){
            nrd*=2;
            sd*=(pw(x,2)-1)/(x-1);
        }
        g<<nrd<<" "<<sd%9973<<'\n';

    }


    return 0;
}