Cod sursa(job #2422043)

Utilizator Briana_NeaguNeagu Briana Briana_Neagu Data 16 mai 2019 22:15:04
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include<bits/stdc++.h>
#define MOD 9973
#define stop 1000006
using namespace std;

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

bool p[stop];
//p[i]==1 i nu e prim
int prim[stop];
//prim[i]- numarul prim de 'rang' i 
long long sumdiv, nrdiv;
long long n;
int t;


void ciur()
{

  int q=0;
   p[1]=1;
   for (int i=4;i<=stop;i=i+2)
     p[i]=1;
   for (int i=3;i*i<=stop;i++)
    if (p[i]==0)
      {

        for (int j=i*i;j<=stop;j+=2*i)
          p[j]=1;
      }
  for (int i=1;i<=stop;i++)
  if (p[i]==0)
   prim[++q]=i;
}

long long  lgput (long long a , long long b)
{
   if (b==0)
     return 1;
    if (b%2)
      return a * lgput ((a*a), b/2);
    else return lgput((a*a),b/2);

}

int main()
{
  ciur();
  f>>t;
  while (t--)
  {
    sumdiv=1;
    nrdiv=1;
    f>>n;
    for (int i=1; n!=1 ;i++)
      if (n%prim[i]==0)
      {
          long long  nr=0;
          while (n%prim[i]==0)
          {
            nr++;
            n/=prim[i];
          }
          nrdiv*=(nr+1);
          sumdiv*=((lgput(prim[i],nr+1)-1)/(prim[i]-1));
          sumdiv%=MOD;
      }


    g<<nrdiv<<" "<<sumdiv<<'\n';
  }
}