Pagini recente » Cod sursa (job #229388) | Cod sursa (job #449146) | Cod sursa (job #527592) | Cod sursa (job #2121312) | Cod sursa (job #2271793)
#include <fstream>
#include <vector>
#include <bitset>
#include <cmath>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int main() {
vector<int> primes;
{
bitset<1000000> prime;
prime[0] = true;
prime[1] = true;
for(int x = 4; x<1000000; x+=2)
prime[x] = true;
for(int x = 3; x<=1000; x+=2) {
if(!prime[x])
for(int y = x + x; y<1000000; y+=x)
prime[y] = true;
}
for(int x = 2; x<1000000; x++) {
if(!prime[x])
primes.push_back(x);
}
}
int n;
in>>n;
for(int x1 = 0, nr; x1<n; x1++) {
in>>nr;
vector<pair<int, int> > div;
int lim = sqrt(nr);
for(unsigned int x = 0; (x<primes.size())&&(primes[x]<=lim)&&(primes[x]<=nr); x++) {
if((nr%primes[x])==0)
div.push_back(pair<int, int>(primes[x], 0));
else
continue;
while((nr%primes[x])==0) {
nr/=primes[x];
div.back().second++;
}
}
if(!div.size()) {
out<<2<<' '<<nr+1<<'\n';
continue;
}
long long int card = 1;
long long int sum = 1;
for(pair<int, int> div_ : div) {
card*=div_.second + 1;
sum*=(pow(div_.first, div_.second + 1) - 1)/(div_.first - 1);
}
out<<card<<' '<<sum<<'\n';
}
}