Cod sursa(job #2165100)

Utilizator ivddabDabelea Ioana-Viviana ivddab Data 13 martie 2018 11:10:28
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <bitset>
#define NM 1000000
#include <algorithm>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long n,m,i,j,nrd,p1,p2,x,nr,p;
long long  v[NM];
bitset <NM> c;
int main()
{
    f>>n; m=0;
    for(i=2;i*i<=NM;i++){
        if(c[i]==0){
            v[++m]=i;
            for(j=i*i;j<=NM;j+=i) c[i]=1;
        }
    }
    for(j=sqrt(NM)+1;j<=NM;j++) if(c[j]==0) v[++m]=j;
    //for(i=1;i<=m;i++) g<<v[i]<<' ';
    for(i=1;i<=n;i++){
        f>>x;
        j=1; nrd=1; p1=1; p2=1;
        while(v[j]*v[j]<=x){
            nr=0; p=v[j];
            while(x%v[j]==0) { x/=v[j]; p*=v[j]; nr++; }
            p1=((p1*(p-1))/(v[j]-1))%9973; //p2=p2*(v[j]-1);
            nrd=nrd*(nr+1);
            j++;
        }
        if(x!=1){ p1=((p1*((x*x)-1))/(x-1))%9973; nrd*=2; }
        g<<nrd<<' '<<p1%9973<<'\n';
    }
    return 0;
}