Mai intai trebuie sa te autentifici.
Cod sursa(job #582731)
Utilizator | Data | 15 aprilie 2011 20:07:14 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.68 kb |
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long putere,nrd,sumad,i,nr;
int j;
long long ridicare(int expo)
{int k;
putere=1;
for(k=1;k<=expo+1;k++)
putere*=j;
return putere;
}
int prim(long long numar)
{int ok,d;
ok=1;
for(d=2;d<=sqrt(numar);d++)
if(numar%d==0) ok=0;
return ok;
}
int main()
{int t,fm;
f>>t;
for(i=1;i<=t;i++)
{f>>nr; nrd=sumad=1; if(prim(nr)) {nrd*=2; sumad*=(1+nr); } else { j=2;
do
{fm=0;
while(nr%j==0)
{fm++;
nr/=j;
}
nrd*=(fm+1);
sumad*=(ridicare(fm)-1)/(j-1);
if(!prim(nr)) j++;
else j=nr;
}while(nr!=1);
}g<<nrd<<" "<<sumad%9973<<'\n';
}
return 0;
}