Pagini recente » Cod sursa (job #492897) | Cod sursa (job #3002057)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long n;
bool ci[1000005];
vector<int> primes;
void ciur()
{
if(n>1)
primes.push_back(2);
for(int i=3;i<=1000000;i = i + 2)
{
if(ci[i] == false)
{
for(int j=i*2;j<=1000000;j = j + i)
{
ci[j] = true;
}
primes.push_back(i);
}
}
}
long long ridput(long long baza,long long putere)
{
long long aux = 1;
while(putere)
{
if(putere%2 == 0)
{
baza = ((baza % 9973) * (baza % 9973)) % 9973;
putere /= 2;
}
else if(putere%2 == 1)
{
putere--;
aux = ((aux % 9973) * (baza % 9973)) % 9973;
}
}
return aux;
}
void descfact(long long x)
{
long long suma = 1,cardinal = 1;
for(int i=0;i<primes.size() && x > 1;i++)
{
int cnt = 0;
while(x%primes[i] == 0)
{
cnt++;
x = x / primes[i];
}
cardinal = cardinal * (cnt+1);
long long x = (ridput(primes[i],(cnt+1))-1) % 9973;
long long y = primes[i]-1;
if(x == -1)
x = 9972;
suma = (suma * (x/y))%9973;
}
g<<cardinal<<" "<<suma<<"\n";
}
int main()
{
f>>n;
ciur();
while(n--)
{
long long x;
f>>x;
descfact(x);
}
}