Cod sursa(job #1813983)

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

using namespace std;

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

int pw(int a, int p){
    int ans=1;
    for(int i=1;i<=p;i++) ans*=a,ans%=MOD;
    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;
        s=1; cnt=1;
        for(int i=0;i<p.size();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);
                s/=p[i]-1;
            }
        }
        out << cnt << ' ' << s << '\n';
    }
}