Cod sursa(job #2496521)

Utilizator divianegoescuDivia Negoescu divianegoescu Data 20 noiembrie 2019 22:59:18
Problema Suma si numarul divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <bitset>
#define R 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int n,t,i,j,x,divizor,exp,nrdiv,prime[100000];
long long putere,sumdiv;
bitset <1000100> b;
void ciur(){
    for(i=2;i<=1000000;i++)
        if(b[i]==0){
            prime[++prime[0]]=i;
            for(j=i+i;j<=1000000;j+=i)
                b[j]=1;
        }
}
int main(){
    ciur();
     for(fin>>t;t--;){
        fin>>x;
        if(x==1){fout<<"1 1\n";continue;}
        nrdiv=sumdiv=1;
        for(i=1;i<=prime[0] && prime[i]<=x/prime[i] && x>1;i++)
            if(x%prime[i]==0){
                exp=0;
                divizor=putere=prime[i];
                while(x%prime[i]==0){
                    putere*=divizor;
                    x/=divizor;
                    exp++;
                }
                nrdiv*=(exp+1);
                sumdiv=(sumdiv*((putere-1)/(divizor-1)%R))%R;
            }
        if(x>1){
            nrdiv*=2;
            sumdiv=(sumdiv*(x+1))%R;
        }
        fout<<nrdiv<<" "<<sumdiv<<"\n";
    }
    return 0;
}