Cod sursa(job #1261064)

Utilizator andydumeDumenica Andrei andydume Data 11 noiembrie 2014 21:55:48
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
using namespace std;
long long k,maxim;
bool fol[1000001];
void ciur()
{
 long long  i,j;
 for(i=1;i*i<=maxim;i++)fol[i]=1;
 for(i=2;i*i<=maxim;i++)
  if(fol[i])
  for(j=i+i;j*i<=maxim;j+=i)
   fol[j]=0;
}
int main()
{
 ifstream f("ssnd.in");
 ofstream g("ssnd.out");
 long long n[11]={0},i=0,nr=0,l=0,p=0,nn=0,suma=0,put=0,j=0;
 f>>nn;
 for(i=1;i<=nn;i++)
 {
  f>>n[i];
  if(maxim<n[i]) maxim=n[i];
 }
 ciur();
 for(l=1;l<=nn;l++)
 {
  nr=1;
  p=1;
  suma=1;
  for(i=2;i*i<=n[l];i++)
  {
   p=0;
   if(n[l]%i==0 && fol[i]==1)
   {    put=1;
    while(n[l]%i==0)
    {put=put*i;
     n[l]=n[l]/i;
     p++;
    }
    nr=nr*(p+1);
    if(put!=1)
    suma=suma*((put*i-1)/(i-1));
   }
  }
  if(n[l]!=1)
    {suma=suma*(n[l]*n[l]-1)/(n[l]-1);
    nr=nr*2;}
  g<<nr<<' '<<suma<<'\n';
 }
 f.close();
 g.close();
 return 0;
}