Nu aveti permisiuni pentru a descarca fisierul grader_test4.ok
Cod sursa(job #405789)
Utilizator | Data | 28 februarie 2010 19:13:38 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 70 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.88 kb |
#include<fstream>
#include<bitset>
using namespace std;
const char iname[]="ssnd.in";
const char oname[]="ssnd.out";
const int maxn=1000005;
const int mod=9973;
ifstream f(iname);
ofstream g(oname);
bitset<maxn> a;
int p[maxn],i,n;
long long x,j,k,s,nr,v,r;
int main()
{
f>>n;
for(j=2;j<maxn;++j)
if(a[j]==0)
{
p[++k]=j;
for(s=j*j;s<maxn;s+=j)
a[s]=1;
}
for(i=1;i<=n;++i)
{
f>>x;
nr=1;
s=1;
for(j=1;p[j]*p[j]<=x;++j)
{
v=0;r=1;
while(x%p[j]==0)
x/=p[j],r*=p[j],++v;
nr*=v+1;
s*=(r*p[j]-1)/(p[j]-1);
s%=mod;
}
if(x>1)
nr*=2,s*=x+1,s%=mod;
g<<nr<<" "<<s<<"\n";
}
f.close();
g.close();
return 0;
}