Cod sursa(job #1565328)

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