Cod sursa(job #2563111)

Utilizator kerry6205Motiu Radu kerry6205 Data 29 februarie 2020 23:32:21
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define O 1000005
using namespace std;

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

bool v[O];
int a[O];
int prime[80000];

int long long power(int long long N,int b)
{
    //for(int i=0;i<b-1;i++)
      //  N*=N;
    //return N;
    if(b==0)
        return 1;
    else
        return (N*power(N,b-1));
}


int main()
{
    /// 10110110100
    int i,j,c=0,p=1,k=0;
    int s=1,t;
    int long long N;
    fin>>t;
    for(i=2;i<=O;i++)
        if(!v[i])
            for(j=i+i;j<=O;j+=i)
                v[j]=1;
    for(i=2;i<O;i++)
        if(v[i]==0)
            prime[k++]=i;
    //for(i=0;i<k;i++)
      //  cout<<prime[i]<<' ';
    for(j=0;j<t;j++)
    {
        fin>>N;
        for(i=0;i<k&&N>1;i++)
            while(N%prime[i]==0)
                {
                    N/=prime[i];
                    a[i]++;
                }
        for(i=0;i<k;i++)
            if(a[i])
            {
                p*=(a[i]+1);
                s*=((power(prime[i],a[i]+1)-1)/(prime[i]-1));
                s%=9973;
              ///  cout<<prime[i]<<' '<<a[i]<<endl;
            }
        if(N>1)
            {///cout<<N<<" 1"<<endl;
            p*=2;
            //i=(power(N,2)-1)/(N-1);
            //s*=i;
            s+=N;
            s%=9973;
            }
        //cout<<(pow(N,2)-1)/(N-1)<<endl;
        fout<<p<<' '<<s<<endl;

        for(i=0;i<k;i++)
            a[i]=0;
        //reset();
        s=1;
        p=1;
    }
    /*for(i=0;i<t;i++)

    */
    //fout<<c;
}