Cod sursa(job #1565340)

Utilizator Darius15Darius Pop Darius15 Data 10 ianuarie 2016 17:31:47
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long i,ans,t,z,pr,put,nre,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<=t;i++)
    {
      f>>x;
      nrd=1;
      nre=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--;
        nrd*=(nr+1);
        pr%=MOD;
        nre*=pr;
        put=(prim[j]-1);
        ans=1;
        for (z=0;(1<<z)<=(MOD-2);z++)
        {
          if ((MOD-2) & (1<<z))
            ans*=put,ans%=MOD;
          put=put*put;
          put%=MOD;
        }
        nre*=ans;
        nre%=MOD;
      }
      if (x>1) {nre*=(x+1);
      nre%=MOD;
      nrd*=2;
      }
      g<<nrd<<' '<<nre<<'\n';
    }
    return 0;
}