Cod sursa(job #2587121)

Utilizator sulzandreiandrei sulzandrei Data 22 martie 2020 00:58:39
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <utility>
#include <cstring>
#include <bitset>
#include <vector>
using namespace std;

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

#define ull unsigned long long int
#define mod 9973
#define SIZE 1000003
bitset<1000003> prime;
int pri[1000003];
int pric=0;
void sieve(int n){
    prime.flip();
    for(int i = 3; i*i <=SIZE ;i +=2)
        if(prime[i]==1)
            for(int j =i*i; j<=SIZE ;j += 2*i)
                prime[j]=0;

    pri[pric++]=2;
    for(int i =3 ;i<=size ;i+=2)
        if(prime[i]==1){
         pri[pric++]=i;
        }

}

void work(ull n){
    ull Sdiv=1;
    ull Ndiv=1;
    for(int j =0; j <pric && pri[j]*pri[j]<=n; j++){
        ull i=pri[j];
        if(n%i==0) {
            ull ndiv=i;
            ull nr=1;
            while(n%i==0){
                nr++;
                n /=i;
                ndiv *=i%mod;
            }

            Ndiv*=nr%mod;
            Sdiv*=((ndiv-1)/(i-1))%mod;
        }
    }
    if(n >1) {
        Sdiv*=(n*n-1)/(n-1)%mod;
        Ndiv*= 2;
    }
    out<<Ndiv<<" "<<Sdiv%mod<<'\n';
}


int main ( )
{
    ull n,t;
    in>>t;
    while(t--){
        in>>n;
        sieve(n);
         work(n);

    }

    return 0;
}