Pagini recente » Cod sursa (job #1467184) | Cod sursa (job #1003642) | Cod sursa (job #805985) | Cod sursa (job #524235) | Cod sursa (job #1791437)
#include <iostream>
#include <cstdio>
using namespace std;
FILE *f, *g;
bool p[1000001];
long long v[80001];
int k;
int n;
void euclid(int a, int b, int &x, int &y, int &d)
{
if(b == 0)
{
x = 1;
y = 0;
d = a;
return;
}
int xx, yy, q = a / b;
euclid(b, a % b, xx, yy, d);
x = yy;
y = xx - yy * q;
}
void ciur()
{
int n = 1000000;
int i, j;
p[0] = p[1] = 1;
for(i = 4; i <= n; i += 2)
p[i] = 1;
for(i = 3; i * i <= n; i += 2)
if(p[i] == 0)
for(j = i * i; j <= n; j += i * 2)
p[j] = 1;
v[++ k] = 2;
for(i = 3; i <= n; i += 2)
{
if(p[i] == 0)
v[++ k] = i;
}
//printf("%d\n", k);
}
void poz(int &x, int n)
{
if(x < 0)
{
if(-x < n)
x += n;
else
if(-x >= n)
x += (((-x) / n) + (((-x) % n) != 0)) * n;
}
}
int power(int a, int b)
{
int i, p = 1;
for(i = 1; i <= b; i ++)
{
p *= a;
p %= 9973;
}
return p;
}
void sumdiv(long long nr)
{
long long sum, div, p, d, x, y = 1;
sum = 1;
div = 1;
p = 0;
d = 1;
y = 1;
while(d <= k && v[d] * v[d] * 1LL <= nr)
{
p = 0;
while(nr % v[d] == 0)
{
nr /= v[d];
p ++;
}
if(p != 0)
{
div *= (p + 1);
x = (power(v[d], p + 1) - 1) ;
y *= (v[d] - 1);
y %= 9973;
sum *= x;
// sum /= (v[d] - 1);
sum %= 9973;
}
d ++;
}
if(nr > 1)
{
y *= (nr - 1);
y %= 9973;
sum *= ((nr % 9973) * (nr % 9973) - 1);
// sum /= (nr - 1);
sum %= 9973;
div *= 2;
}
// printf("%d\n", y);
int i, rez = 0, j;
euclid(y, 9973, rez, i, j);
poz(rez, 9973);
sum = sum * rez % 9973;
fprintf(g, "%lld %lld\n", div, sum );
}
void readFile()
{
f = fopen("ssnd.in", "r");
g = fopen("ssnd.out", "w");
int i;
long long nr;
fscanf(f, "%d", &n);
for(i = 1; i <= n; i ++)
{
fscanf(f, "%lld", &nr);
sumdiv(nr);
}
fclose(f);
fclose(g);
}
int main()
{
ciur();
readFile();
return 0;
}