Pagini recente » Cod sursa (job #1358686) | Cod sursa (job #1073762) | Cod sursa (job #1750046) | Cod sursa (job #2474141) | Cod sursa (job #1545309)
#include <stdio.h>
#include <math.h>
#define lung 1000001
struct Res
{
unsigned long long nr;
unsigned long long sum;
};
FILE* fin;
FILE* fout;
unsigned long long* divizori;
unsigned long long* puteri;
unsigned long long* sol;
Res result;
void load()
{
fin = fopen("ssnd.in","r");
fout = fopen("ssnd.out","w");
}
unsigned long long readT()
{
unsigned long long t;
fscanf(fin,"%llu",&t);
return t;
}
unsigned long long init()
{
load();
return readT();
}
void write(Res res)
{
fprintf(fout,"%llu %llu\n",res.nr,res.sum);
}
unsigned long long getPuteri(unsigned long long n)
{
unsigned long long rad ;
rad = sqrtl(n);
divizori = new unsigned long long[rad + 1];
puteri = new unsigned long long[rad+1];
unsigned long long d = 2;
unsigned long long p;
unsigned long long index = 0;
while(n!=1)
{
p = 0;
while(n%d == 0)
{
n /= d;
p++;
}
if(p!=0)
{
divizori[index] = d;
puteri[index] = p;
index++;
}
d++;
}
sol = new unsigned long long[index];
return index;
}
void freeData()
{
delete[] divizori;
delete[] puteri;
delete[] sol;
divizori = 0;
puteri = 0;
sol = 0;
}
unsigned long long sum(unsigned long long n)
{
unsigned long long sum;
sum = 1;
for(unsigned long long i=0;i<n;i++)
{
sum*=powl(divizori[i],sol[i]);
}
return sum;
}
void Backtr(unsigned long long i,unsigned long long n)
{
if(i == n)
{
unsigned long long res;
res = sum(n);
result.nr++;
result.sum +=res;
}
else
{
for(unsigned long long j = 0 ; j<= puteri[i];j++)
{
sol[i] = j;
Backtr(i+1,n);
}
}
}
void ssnd(int t)
{
unsigned long long nr;
for(int k=0;k<t;k++)
{
fscanf(fin,"%llu",&nr);
result.nr = 0;
result.sum = 0;
Backtr(0,getPuteri(nr));
write(result);
freeData();
}
}
void CloseFiles()
{
fclose(fin);
fclose(fout);
}
void Terminate()
{
CloseFiles();
freeData();
}
int main()
{
ssnd(init());
Terminate();
return 0;
}