Pagini recente » Cod sursa (job #1453301) | Cod sursa (job #2636883) | Cod sursa (job #1402699) | Cod sursa (job #705019) | Cod sursa (job #1018464)
#include <iostream>
#include <fstream>
#include <math.h>
#include <vector>
#include <stdlib.h>
std::ifstream fin("ssnd.in");
std::ofstream fout("ssnd.out");
struct myVal
{
long long aparitii, val;
};
std::vector<long long> nrPrime;
void setPrime(bool prims[])
{
int n = 1000001;
for(int i = 2; i <= n; i++)
{
prims[i] = true;
}
for(int i = 2; i <= n; i++)
{
if(prims[i] == true)
{
nrPrime.push_back(i);
int j = i + i;
while(j <= n)
{
prims[j] = false;
j += i;
}
}
}
}
void citire(int &n, long long nr[])
{
fin>>n;
for(int i = 0; i < n; i++)
{
fin>>nr[i];
}
}
void rezolvare(int n, long long nr[], bool prims[])
{
for(int i = 0; i < n; i++)
{
std::vector<myVal*> divizorii;
long long val = nr[i];
int j = 0;
while(nr[i] != 1)
{
if(nr[i] % nrPrime[j] == 0)
{
myVal *vs = new myVal;
vs->val = nrPrime[j];
vs->aparitii = 0;
while(nr[i] % nrPrime[j] == 0 && nr[i] > 1)
{
vs->aparitii++;
nr[i] = nr[i] / nrPrime[j];
}
divizorii.push_back(vs);
}
j++;
}
if(divizorii.empty())
{
myVal *vs = new myVal;
vs->aparitii = 1;
vs->val = val;
divizorii.push_back(vs);
}
int nrDiv = 1;
for(int j = 0; j < divizorii.size(); j++)
{
// std::cout<<divizorii[j]->val<<' '<<divizorii[j]->aparitii<<"; ";
nrDiv = nrDiv * (divizorii[j]->aparitii + 1);
}
fout<<nrDiv<<' ';
// std::cout<<'\n';
int sumaDiv = 1;
for(int j = 0; j < divizorii.size(); j++)
{
sumaDiv = sumaDiv * (long long)((pow(divizorii[j]->val, divizorii[j]->aparitii + 1) - 1) / (divizorii[j]->val - 1)) % 9973;
}
fout<<sumaDiv<<'\n';
while(!divizorii.empty())
{
delete divizorii.back();
divizorii.pop_back();
}
}
}
int main()
{
int n;
bool prims[1000001];
long long nr[1001];
setPrime(prims);
citire(n, nr);
rezolvare(n, nr, prims);
return 0;
}