Cod sursa(job #1527894)

Utilizator mister_adyAdrian Catana mister_ady Data 18 noiembrie 2015 20:15:14
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
   
  ifstream f("ssnd.in");
  ofstream g("ssnd.out");
 
  int serie(long long int i, long long int v)
  { 
   long long int S = 1;
      while(v != 1)
      {
        S = S + pow(i,(v-1));
        v--;
      }
    return S % 9973;
  }
 
  void div (long long int n, long long int &nrdiv, long long int &S)
    {
    long long int i, j, multiplicitate, v[1000006], aux = n; 
    v[1] = 0;
    nrdiv = 1;
    for ( i = 2 ; i <= sqrt(n) ; i++ )
      v[i] = i;
    for ( i = 2 ; i <= sqrt(n) ; i++ )
      {
      if (v[i] == i)
          {
          for( j = i + i ; j <= sqrt(n) ; j = j + i )
          v[j] = 0;  
          }
      if (v[i] != 0)
        {
        multiplicitate = 0;
        while(aux % v[i] == 0)
          {
          multiplicitate = multiplicitate + 1;
          aux = aux / v[i];
          }
        v[i] = multiplicitate + 1;  
        }        
      }
       
    S = 1;
    if(aux != 1)
    {
      nrdiv = 2;
      S = (S + aux) % 9973;
    }
       
    for(i = 2 ; i <= sqrt(n) ; i++)
      if(v[i] != 0)
        {
        nrdiv = nrdiv * v[i];
        S = (S * serie(i,v[i])) % 9973;
        }
     
    if (nrdiv == 1)
      nrdiv = 2;
  }
 
  long long int v[1000006];
 
  int main()
  {
    long long int n, i, x, rezultat;
    long long int S;
    f>>n;
    for( i = 1 ; i <= n ; i++)
    {f>>x;
    div(x, rezultat, S);    
    g<<rezultat<<" "<<S<<endl;
    }    
    return 0;
  }