Cod sursa(job #606970)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 10 august 2011 15:41:38
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;

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

int t,ti,m=9973;
long long n,i,nmax=1000010,p1,d1,card,suma,t1,t2;
bool ciur[1000010];
int pr[1000010],pri,ci,cj;

int pow (int b, int p) {
    int r;long long x;
    for (x=b,r=1;p>0;p>>=1) {
        if ((p & 1) !=0)
            r=r*x;
        x=x*x;
    }
    return r;
}

int main() {
    ciur[1]=true;pri=0;
    for (ci=2;ci<=nmax;ci++) {
        if (ciur[ci]==false) {pri++;pr[pri]=ci;}
        for (cj=2*ci;cj<=nmax;cj+=ci) ciur[cj]=true;
    }
    f >> t;
    for (ti=1;ti<=t;ti++) {
        f >> n;pri=0;card=1;suma=1;
        while (n!=0&&n!=1) {
            pri++;p1=pr[pri];d1=0;
            while (n%p1==0 && n!=0 && n!=1) {d1++;n/=p1;}
            card=card*(d1+1);
            t1=(pow(p1,d1+1)-1);
            t2=(p1-1);
            suma=suma*(t1/t2)%m;
        }
        g << card << ' ' << suma << '\n';
    }
    f.close();g.close();
    return 0;
}