Cod sursa(job #1093530)
Utilizator | Data | 28 ianuarie 2014 10:08:08 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.8 kb |
#include <cstdio>
#include <cstring>
#define Mod 9973
using namespace std;
int nr, s;
bool ok[7000001], pus[7000001];
void ciur (int n)
{
int i, j;
for (i=1; ((i*i)<<1)+(i<<1)<=n/2; i++)
{
if (ok[i]==false)
{
for (j=((i*i)<<1)+(i<<1); (j<<1)+1<=n/2; j+=(i<<1)+1)
{
ok[j]=true;
}
}
}
for (i=1; (i<<1)+1<=n/2; i++)
{
if (ok[i]==false)
{
for (j=(i<<1)+1; j<=n/2; j+=(i<<1)+1)
{
if (n%j==0 && pus[j]==false)
{
pus[j]=true;
nr++; s+=j; s%=Mod;
}
}
}
}
}
int main()
{
int t, n, i, j;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&t);
for (i=1; i<=t; i++)
{
scanf("%d",&n); nr=2; s=(n+1)%Mod;
if (n<700000) memset(pus,0,sizeof(n*sizeof(bool)));
else memset(pus,0,sizeof(pus));
for (j=2; j<n; j+=2)
{
if (n%j==0)
{
pus[j]=true;
nr++; s+=j;
s%=Mod;
}
}
ciur(n);
printf("%d %d\n",nr,s);
}
fclose(stdin);
fclose(stdout);
return 0;
}