Cod sursa(job #2312381)

Utilizator razvan1403razvan razvan1403 Data 4 ianuarie 2019 19:28:28
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include<fstream>
#define NMAX 1000000
#define dimensiune_vector 1000005
using namespace std;

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

int a;
long long b,prime[dimensiune_vector],z;
char Prim[dimensiune_vector];

void ciur(){
    Prim[0]=1;
    Prim[1]=1;
    for(int i=4;i<= NMAX;i+=2)
        Prim[i]=1;
    for(int i=3;i*i<= NMAX;i+=2)
        for(int j=i*i;j<= NMAX;j+=2*i)
            Prim[j]=1;
    prime[++z]=2;
    for(int i=3;i<= NMAX;i+=2)
        if(Prim[i]==0)
            prime[++z]=i;
}

int main()
{
    ciur();
    fin>>a;
    for(int i=0;i<a;i++){
        long long x, counter_div=1,sum_div=1;
        fin>>x;
        for(int i=1;i<=z && prime[i]*prime[i]<=x;i++){
            int p=0;
            while(x%prime[i]==0){
                ++p;
                x/=prime[i];
            }
            if(p){
                counter_div*=(p+1);
                long long number=1;
                for(int j=0;j<p+1;++j)
                    number*=prime[j];
                sum_div=(sum_div*((number-1)/(prime[i]-1)))&9973;
            }
        }
        if(x>1){
        counter_div*=2;
        sum_div=(sum_div*((x*x-1)/(x-1)))%9973;
    }
        fout<<counter_div<<" "<<sum_div<<"\n";
    }
    return 0;

}