Pagini recente » Cod sursa (job #2414973) | Cod sursa (job #878271) | Cod sursa (job #263294) | Cod sursa (job #2470226) | Cod sursa (job #1287716)
#include "stdio.h"
#include <bitset>
using namespace std;
#define MAX 1000001
#define MOD 9973
FILE *f, *g;
long long N;
int T, K = 0;
int prime[MAX];
bitset <MAX> visited;
void ciur()
{
for(int i = 2; i < MAX; i++)
{
if(visited[i] == 0)
{
prime[++K] = i;
for(int j = i + i; j < MAX; j = j + i)
visited[j] = 1;
}
}
}
int power(int x, int p)
{
int result = 1;
x = x % MOD;
for( ; p; p >>=1)
{
if(p & 1)
{
result = result * x;
result = result % MOD;
}
x = x * x;
x = x % MOD;
}
return result;
}
int main()
{
f = fopen("ssnd.in", "r");
g = fopen("ssnd.out", "w");
ciur();
fscanf(f, "%d", &T);
for(int i = 1; i <= T; i++)
{
fscanf(f, "%lld", &N);
int number = 1;
int sum = 1;
for(int j = 1; j <= K && 1LL * prime[j] * prime[j] <= N; j++)
{
if(N % prime[j] != 0)
continue;
int p = 0;
while(N % prime[j] == 0)
{
N = N / prime[j];
p++;
}
number = number * (p+1);
int nr1 = (power(prime[j], p+1) - 1) % MOD;
int nr2 = power(prime[j] - 1, MOD - 2) % MOD;
sum = (((sum * nr1) % MOD) * nr2) % MOD;
}
// N is prime
if(N > 1)
{
number = number * 2;
sum = (1LL * sum * (N+1)) % MOD;
}
fprintf(g, "%d %d\n", number, sum);
}
fclose(f);
fclose(g);
return 0;
}