Cod sursa(job #2230956)

Utilizator bojemoiRadu Mamaliga bojemoi Data 12 august 2018 15:47:06
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <bitset>
#define huim 9973
using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

bitset <1000000> p;
int prim[166670];
int k = 0, t;
void eratostene(){
    for(int i = 2; i<=1000; ++i){
        if(!p[i]){
            prim[++k] = i;
            for(int j = 2*i; j<=1000000; j+=i){
                p[j] = true;
            }
        }
    }
    for(int i = 1001; i<1000000; i++){
        if(!p[i]){
            prim[++k] = i;
        }
    }

}


int main()
{
    eratostene();
    fin>>t;
    while(t--){
        long long n;
        fin>>n;
        long long nrdiv = 1, sumdiv = 1;

        for(int i = 1; i<=k; ++i){
            int optimus = prim[i];
            if(optimus*optimus*1LL>n) break;
            long long putregai = 1;
            int ori = 0;
            while(n%optimus==0){
                ori++;
                n/=optimus;
                putregai*=optimus;

            }
            nrdiv*=ori+1;
            sumdiv*=((putregai*optimus-1)/(optimus-1));
        }
        if(n>1){
            nrdiv<<=1;
            sumdiv*=(n+1);
        }
        fout<<nrdiv<<' '<<sumdiv%huim<<'\n';

    }

    return 0;
}