Cod sursa(job #1265078)

Utilizator LidiadobreaDobrea Lidia Ioana Lidiadobrea Data 16 noiembrie 2014 18:13:42
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
using namespace std;
long long v[10001],d,n,i,val,prim,nrdiv,sdiv,p,s,j;
char ciur[1000001];
int main(){
    ifstream in("ssnd.in");
    ofstream out("ssnd.out");
    in>>n;
    val=-1;
    for(i=1;i<=n;i++){
        in>>v[i];
        if(v[i]>val) val=v[i];
    }
    prim=2;
    while(prim*prim<=val){
        for(d=2;d*prim<=val;d++)
            ciur[prim*d]=1;
        prim++;
        while(ciur[prim]==1) prim++;
    }
    for(i=1;i<=n;i++){
        nrdiv=1;sdiv=1;
        for(d=2;d*d<=v[i];d++)
            if(ciur[d]==0&&v[i]%d==0){
            p=0;
            while(v[i]%d==0){
                p++;
                v[i]/=d;
            }
            if(p>0){
                s=1;
                for(j=1;j<=p+1;j++)
                    s*=d;
                s--;
                s=s/(d-1);
                nrdiv*=p+1;
                sdiv*=s;
            }
        }
        if(v[i]!=1){
            s=(v[i]*v[i]-1)/(v[i]-1);
            nrdiv*=2;
            sdiv*=s;
        }
        out<<nrdiv<<" "<<sdiv<<'\n';
    }
    in.close();
    out.close();
    return 0;
}