Cod sursa(job #2791219)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 30 octombrie 2021 11:18:05
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
#define nmax 1000005
#define MOD 9973
using namespace std;
string prob="ssnd";
ifstream in(prob+".in");
ofstream out(prob+".out");
int prime[nmax];
int s=0;
bool ciur[nmax];
int64_t powow(int64_t n,int64_t p){
    if(p==0)return 1;
    if(p==1)return n;
    int64_t pp=powow(n,p>>1);
    return pp*pp*powow(n,p&1);
}
void doCiur(){
    prime[s++]=2;
    for(int i=3;i<=nmax;i+=2){
        if(!ciur[i]){
            prime[s++]=i;
            for(int64_t j=i;j*i<=nmax;j+=2){
                ciur[i*j]=1;
            }
        }
    }
}
void solve(){
    int64_t n;
    in>>n;
    int nr,sum;
    nr=sum=1;
    for(int i=0;i<s;i++){
        if(prime[i]*prime[i]>n)break;
        if(n%prime[i])continue;
        int ind=0;
        while(n%prime[i]==0){
            n/=prime[i];
            ind++;
        }
        if(ind){
            nr=(nr*(ind+1))%MOD;
            sum=(sum*(powow(prime[i],ind+1)-1)/(prime[i]-1))%MOD;
        }
    }
    if(n!=1){
        nr=(nr*2)%MOD;
        sum=(sum*((powow(n,2)-1)/(n-1)))%MOD;
    }
    out<<nr<<' '<<sum<<'\n';
}
int32_t main(){
    doCiur();
    int t;
    in>>t;
    while(t--)solve();
}