Pagini recente » Cod sursa (job #335105) | Cod sursa (job #3129491) | Cod sursa (job #670650) | Cod sursa (job #2353291) | Cod sursa (job #1014280)
#include <iostream>
#include <fstream>
#include <math.h>
std::ifstream fin("ssnd.in");
std::ofstream fout("ssnd.out");
void setPrime(bool prims[])
{
int n = 1000001;
prims[0] = true;
prims[1] = false;
for(int i = 2; i * i < n; i++)
{
if(prims[i] != true)
{
prims[i] = false;
int j = i + i;
while(j * j < n)
{
prims[j] = true;
j += i;
}
}
}
}
void citire(int &n, int nr[])
{
fin>>n;
for(int i = 0; i < n; i++)
{
fin>>nr[i];
}
}
void rezolvare(int n, int nr[], bool prims[])
{
for(int i = 0; i < n; i++)
{
int val = nr[i];
// std::cout<<val<<'\n';
int suma = 1;
int numerele[nr[i] / 2], k = 2;
for(int j = 2; j * j <= val; j++)
{
int appr = 0;
while(!prims[j] && nr[i] % j == 0)
{
nr[i] = nr[i] / j;
appr++;
if(j * appr < val / 2)
{
suma = suma + (j * appr);
// numerele[k] = j * appr;
k++;
}
}
// std::cout<<j<<' '<<appr<<'\n';
}
// for(int j = 0; j < k; j++)
// {
// std::cout<<numerele[j]<<' ';
// }
if(val % 2 == 0)
{
k++;
// std::cout<<val/2<<' ';
suma = suma + (val / 2);
}
suma += val;
fout<<k<<' '<<suma<<'\n';
// std::cout<<val<<'\n';
// std::cout<<'\n';
}
}
int main()
{
int n;
bool prims[1000001];
int nr[1001];
setPrime(prims);
citire(n, nr);
rezolvare(n, nr, prims);
return 0;
}