Cod sursa(job #2121633)

Utilizator andrei2707Andrei andrei2707 Data 3 februarie 2018 22:48:34
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long  sum=1,numberOfDivisors=1;
bool c[1000005];
long v[78500];
void ciur()
{
    v[0]=2;
    c[1]=1;
    int k=1;
    for(int i=3;i<=2000000;i+=2)
    {
        if(c[i]==0)
        {
            v[k++]=i;
            for(int j=2*i;j<=2000000;j+=i)
                 c[j]=1;
        }
    }
}
void divs(long long n)
{
    sum=1;numberOfDivisors=1;
    int power=0;
    //long long n2=n;
    int k=0;
    if(c[n]==0&&n%2!=0&&n<1000005)
        sum+=n;
    else
      {
          while(n>1)
          {
             power=0;
             while(n%v[k]==0)
             {
                power++;
                n/=v[k];
             }
             if(power!=0)
             {
               numberOfDivisors*=(power+1);
               sum*=(pow(v[k],power+1)-1)/(v[k]-1);
             }
            k++;
          }
      }
}
int main()
{
    int t;
    long long  n;
    fin>>t;
    ciur();
    for(int i=0;i<t;i++)
    {
        fin>>n;
        divs(n);
        fout<<numberOfDivisors<<" "<<sum%9973<<'\n';
    }
    return 0;
}