Pagini recente » Cod sursa (job #1191598) | Cod sursa (job #3295183) | Cod sursa (job #1347083) | Cod sursa (job #2988101) | Cod sursa (job #963916)
Cod sursa(job #963916)
#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 = 2, p, l = pp.size();
ff.clear();
while(x != 1 && i < l && (long long)pp[i]*pp[i] <= x)
{
if(!bb[i] || x%i!=0){ i++; continue; }
p=0;
while(x%i==0){ x/=i; p++; }
ff.push_back(make_pair(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;
}