Mai intai trebuie sa te autentifici.
Cod sursa(job #2366521)
Utilizator | Data | 4 martie 2019 20:38:28 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.19 kb |
#include <fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int ciur[1000003],prime[1000003],nr,a,b,card=1,nr1,n,s;
long long c;
int paw(int numar,int putere)
{
int aux=1;
while(putere)
{
if(putere%2)
{
putere--;
aux=aux*numar;
}
else
{
putere/=2;
numar=numar*numar;
}
}
return aux;
}
int main()
{
f>>n;
ciur[1]=1;
for(int i=2;i<=1000000;++i)
if(!ciur[i])
{
nr++;
prime[nr]=i;
for(int j=2*i;j<=1000000;j+=i)
{
ciur[j]=0;
}
}
for(int i=1;i<=n;++i)
{
f>>a;b=1;s=1;card=1;
while(a>1)
{
nr1=0;
while(a%prime[b]==0&&a>1)
{
nr1++;
a/=prime[b];
}
if(nr1)
{
card=card*(nr1+1);
int c=prime[b],p;
p=paw(c,nr1+1);p--;
p/=(c-1);
s*=p;
}
b++;
}
g<<card<<" "<<s<<'\n';
}
return 0;
}