Cod sursa(job #2165149)

Utilizator ivddabDabelea Ioana-Viviana ivddab Data 13 martie 2018 11:18:14
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 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,max1;
long long  v[NM],a[NM/1000];
bitset <NM> c;
int main()
{
    f>>n; m=0; max1=0;
    for(i=1;i<=n;i++) { f>>a[i]; max1=max(max1,a[i]); }
    for(i=2;i*i<=sqrt(max1)+1;i++){
        if(c[i]==0){
            v[++m]=i;
            for(j=i*i;j<=sqrt(max1)+1;j+=i) c[i]=1;
        }
    }
     for(j=i+1;j<=sqrt(max1)+1;j++) if(c[j]==0) v[++m]=j;
    //for(i=1;i<=m;i++) g<<v[i]<<' ';
    for(i=1;i<=n;i++){
        x=a[i];
        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;
}