Cod sursa(job #1813996)

Utilizator AlexandruRudiAlexandru Rudi AlexandruRudi Data 23 noiembrie 2016 16:15:19
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

int MOD=9973;
int t;
long long s,a,cnt,n,k;
int lp[1000005];
vector <int> p;

long long pw(long long a, int p){
    long long ans=1;
    for(int i=1;i<=p;i++) ans*=a;
    return ans;
}

int main(){
    ifstream in("ssnd.in");
    ofstream out("ssnd.out");
    in >> t;
    n=1000000;
    for(int i=2;i<=n;i++){
        if(lp[i]==0){
            p.push_back(i);
            lp[i]=i;
        }
        for(int j=0;j<p.size() && p[j]*i<=n && p[j]<=lp[i];j++){
            lp[p[j]*i]=p[j];
        }
    }
    while(t--){
        in >> n;
        k=sqrt(n);
        s=1; cnt=1;
        for(int i=0;i<p.size() && p[i]<=k;i++){
            a=0;
            if(!(n%p[i])){
                while(!(n%p[i])){
                    n/=p[i];
                    a++;
                }
                cnt*=(a+1);
                s*=((pw(p[i],a+1)-1)/(p[i]-1));
                s%=MOD;
            }
        }
        if(n>1) cnt*=2, s*=((n*n-1)/(n-1)),s%=MOD;
        out << cnt << ' ' << s << '\n';
    }
}