Cod sursa(job #1361215)

Utilizator zpaePopescu Andreea zpae Data 25 februarie 2015 20:13:03
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;

ifstream in ("ssnd.in");
ofstream out ("ssnd.out");

const long MAX_N=1000000;
int  p[100000];
bitset <MAX_N> v;

 void ciur()
 {
    long long i, j, k=1;
    p[1]=2;
    for(i=3;i<MAX_N;i+=2){
        if(v[i]==0) {
            p[++k]=i;
            for(j=i*i;j<MAX_N;j+=2*i)
                v[j]=1;}}
 }

 void desco(long long x)
 {
    long long nr, sum, t, i, exp;
    nr=sum=1;
    for(i=1; p[i]*p[i]<=x ;i++){
        if(x%p[i]==0){
        exp=1;
        t=p[i];
        while(x%p[i]==0){
            exp++;
            x=x/p[i];
            t=t*p[i];}
        nr*=exp;
        sum*=(t-1)/(p[i]-1)%9973;}}
    if(x!=1){
        sum*=(x*x-1)/(x-1)%9973;
        nr*=2;}
    out<<nr<<' '<<sum%9973<<endl;
 }

int main()
{
    long long n, q;
    ciur();
    in>>n;
    while(n--){
        in>>q;
        desco(q);}
    return 0;
}