Pagini recente » Cod sursa (job #2303460) | Cod sursa (job #629058) | Cod sursa (job #1236895) | Cod sursa (job #2760131) | Cod sursa (job #963913)
Cod sursa(job #963913)
#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 2000013
#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 desc(vector<pair<int,int> >&ff, long long x)
{
int i = 2, p;
ff.clear();
while(x != 1 && i < max_size && (long long)i*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);
for(int i=0;i<ff.size();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;
};
#endif /* CIUR_H */
ciur a;
int n;
long long x;
int main(){
f >> n;
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;
}