Cod sursa(job #3302386)
Utilizator | Data | 7 iulie 2025 11:28:59 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.12 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
int t;
int main()
{
fin>>t;
int i;
long long n,suma=1,nrd=1,x,k;
for(i=1;i<=t;i++)
{
suma=1;
nrd=1;
fin>>n;
if(n%2==0)
{
k=1;
x=2;
while(n%2==0)
{
n/=2;
k++;
x*=2;
}
x--;
suma*=x;
nrd*=k;
}
for(i=3;i*i<=n;i+=2)
{
if(n%i==0)
{
k=1;
x=i;
while(n%i==0)
{
n/=i;
k++;
x*=i;
}
x--;
x/=(i-1);
suma*=x;
nrd*=k;
}
}
if(n>1)
{
k=2;
x=(n*n-1)/(n-1);
suma*=x;
nrd*=k;
}
fout<<nrd<<" "<<suma<<'\n';
}
return 0;
}