Cod sursa(job #627964)

Utilizator UgleaEduFMI - Edward UgleaEdu Data 31 octombrie 2011 06:36:34
Problema Sum Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;
int i = 1 , divizori[10001];
long long int ciur[110000] , suma;
void init(int n , int m)
{
 int j ;
 for(j = 0 ; j < n ; j++)
  divizori[j]=-1;
 for(j = 1 ; j <= m ; j++)
  ciur[j] = j; 
  
}          
void desc (int n)
{    
 int d , clona;
 i = 1;
 clona = n;  
 for( d = 2 ; d <= n ; d++ )
  if( clona % d == 0 )
   {  
    while( clona % d == 0 )
     clona /= d;    
    divizori[i] = d;       
    i++;
   }
}
int main ()
{
 long int n , x , aux , k , poc , h , limita;
 long long int s;
 int p , j;
 fstream f("sum.in",ios::in);
 fstream g("sum.out",ios::out);
 f>>n;
 for( p = 1 ; p < n+1 ; p++ )
 {
  f>>x;    
  s = suma = 0;    
  aux = 2*x ;
  init( 100 , 2*x );
  desc(x);
  for( i = 1 ; divizori[i] != -1 ; i++);
  limita = i - 1 ;
  for( i = 1 ; i < limita + 1 ; i++ )
   for( j = 1 ; j <= (2*x)/divizori[i] ;j++)
    suma += j*divizori[i];
  s =(aux * (aux+1))/2;
  k = i ; 
  for( i = 1 ; i < k ; i++ )
   for( j = i + 1 ; j <= k ; j++ )
   {
    poc = divizori[i] * divizori[j];
    for( h = 1 ; h <=  (2 * x)/ poc ; h++ )
     suma -= h * poc;
   }    
  
  
  s -= suma;  
  g<<s<<'\n';
 } 
    return 0;
    
}