Cod sursa(job #1565281)

Utilizator Darius15Darius Pop Darius15 Data 10 ianuarie 2016 16:33:24
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long i,t,pr,put,inv[100001],vd,nrd,MOD=9973,nr,p,x,j,prim[100001],l;
bitset <1000001> viz;
int main()
{
  f>>t;
     prim[l=1]=2;
    for (i=3;i<=1000000;i+=2)
      if (viz[i]==false)
    {
      prim[++l]=i;
      for (j=i*i;j<=1000000;j+=i)
      viz[j]=true;
    }
    for (i=1;i<=l;i++)
    {
      put=prim[i]-1;
      inv[i]=1;
      for (j=0;(1<<j)<=(MOD-2);j++){
        if ((MOD-2) & (1<<j))
        inv[i]*=put,inv[i]%=MOD;
       put=put*put;
       put%=MOD;
      }
    }
    for (i=1;i<=t;i++)
    {
      f>>x;
      nrd=1;
      pr=1;
      for (j=1;prim[j]*prim[j]<=x && j<=l;j++)
      if (x%prim[j]==0){
          pr=prim[j];
          nr=0;
        while(x%prim[j]==0)
        pr*=prim[j],nr++,x/=prim[j];
        pr--;
        pr%=MOD;
        pr*=inv[j];
        nrd*=(nr+1);
      }
      if (x>1) {pr*=(x+1);
      nrd*=2;
      }
      g<<nrd<<' '<<pr<<'\n';
    }
    return 0;
}