Cod sursa(job #2367602)
Utilizator | Stoichitescu Maria mariast | Data | 5 martie 2019 11:38:25 |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 70 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.89 kb |
#include<fstream>
using namespace std;
ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
int t,viz[1000110],nr[1000100];
long long n,numar,sum,q,k,p,val;
int main()
{
for(int d=2;d<=1000100;++d){
if(!viz[d]){
nr[++k]=d;
for(int j=2;d*j<=1000100;++j)viz[d*j]=1;
}
}
f>>t;
for(int i=1;i<=t;++i){
f>>n;
numar=1;
sum=1;
q=1;
while(n>1&&q<=k){
p=1;
val=nr[q];
while(n%nr[q]==0){
++p;
n/=nr[q];
val=val*nr[q];
}
if(p!=1){
numar=numar*p;
sum=sum*((val-1)/(nr[q]-1));
}
++q;
}
if(n!=1){
sum=(sum*(n+1));
numar=2*numar;
}
g<<numar%9973<<" "<<sum%9973<<'\n';
}
}