Pagini recente » Cod sursa (job #2786649) | Cod sursa (job #3005487) | Cod sursa (job #2496880) | Cod sursa (job #729972) | Cod sursa (job #963923)
Cod sursa(job #963923)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
/*
* File: ciur.h
* Author: Victor
*
* Created on June 19, 2013, 5:19 PM
*/
#ifndef CIUR_H
#define CIUR_H
#include <bitset>
#include <vector>
#include <math.h>
using namespace std;
#define max_size 1000013
#define modulo 9973
class ciur
{
public:
ciur(){ generate(); }
void generate(){
int i = 2, l = (int)sqrt(max_size);
for(int i=2;i<max_size;i++) bb[i]=1;
while(i <= l)
{
if(!bb[i]){ i++; continue; }
for(int j=i*i;j<max_size;j+=i) bb[j] = 0;
i++;
}
}
bool isprime(int x){
return bb[x];
}
void getprimes()
{
pp.clear();
for(int i=0;i<max_size;i++)
if(isprime(i))pp.push_back(i);
}
void desc(vector<pair<int,int> >&ff, long long x)
{
int i = 0, p, l = pp.size();
ff.clear();
while(x != 1 && i < l && (long long)pp[i]*pp[i] <= x)
{
if(x%pp[i]!=0){ i++; continue; }
p=0;
while(x%pp[i]==0){ x/=pp[i]; p++; }
ff.push_back(make_pair(pp[i],p));
i++;
}
if(x != 1)
ff.push_back(make_pair(x,1));
}
void ssnd(pair<long long, long long>&ss, long long x){
ss = make_pair(1,1);
vector<pair<int,int> >ff;
desc(ff, x);
int l = ff.size();
for(int i=0;i<l;i++)
{
ss.first *= ff[i].second+1;
ss.second = (ss.second*((long long)(pow(ff[i].first, ff[i].second+1)-1)/(ff[i].first-1)))%modulo;
}
}
private:
bitset<max_size>bb;
vector<int>pp;
};
#endif /* CIUR_H */
ciur a;
int n;
long long x;
int main(){
f >> n;
a.getprimes();
for(int i=0;i<n;i++){
f >> x;
pair<long long,long long> ss(0,0);
a.ssnd(ss,x);
g << ss.first << " " << ss.second << endl;
}
return 0;
}