Cod sursa(job #1016107)
Utilizator | Iulia Duta jul123 | Data | 25 octombrie 2013 19:41:41 |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.04 kb |
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bool ciur[1000001];
int n, i, x, r, p, j, k, v[80000], t, y, e ;
for(i=2; i<=1000000; i++)
ciur[i]=true;
r=1000;
for(p=2; p<=r; p++){
if(ciur[p]==1)
for(j=p*p; j<=1000000; j+=p)
ciur[j]=false;
}
k=0;
for(i=2;i<=1000000;i++)
if(ciur[i]==true)
v[k++]=i;
f>>n;
for(i=0;i<n;i++){
f>>x;
t=0;
int nr=1, s=1;
y=x;
if(ciur[y]==0)
while(v[t]*v[t]<=y){
if(x%v[t]==0){
e=0;
p=v[t];
while(x%v[t]==0){
x/=v[t];
e++;
p*=v[t];
}
nr*=(e+1);
s*=(p-1)/(v[t]-1);
}
t++;
}
else
nr=2, s=y+1;
g<<nr<<" "<<s<<"\n";
}
}