Cod sursa(job #2162339)

Utilizator andreiutu111Noroc Andrei Mihail andreiutu111 Data 12 martie 2018 10:07:43
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long N,nr,s,T;
int nrpr[100001],len;
bool viz[1000001];
void ciur(){
    long long l=sqrt(N)+1;
    for(long long i=2;i<=l;++i)
        if(!viz[i]){
            int j=2;
            nrpr[++len]=i;
            while(i*j<=N)viz[i*j]=1,++j;
        }
    for(long long i=l+1;i<=N;++i)
        if(!viz[i])
            nrpr[++len]=i;
}
void calc(long long x){
    ciur();
    int i=1;
    nr=s=1;
    while(x>1){
        int p=0;
        long long y=x;
        bool ok=1;
        while(x%nrpr[i]==0)++p,x/=nrpr[i],ok=0;
        if(!ok)nr*=(p+1),s=(s*((y/x*nrpr[i]-1)/(nrpr[i]-1)))%9973;
        ++i;
    }
}
int main()
{
    f>>T;
    while(T--){
        f>>N;
        calc(N);
        g<<nr<<' '<<s<<'\n';
    }
    return 0;
}