Cod sursa(job #1453153)

Utilizator DjokValeriu Motroi Djok Data 22 iunie 2015 18:39:20
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<fstream>
#include<algorithm>
using namespace std;

const int MOD=9973;

int i,j,t,b[100005],n,sum,nr,m,d;
bool a[1000005];

int Pow(int a,int b) {
    int aux=1;
    while(b)
    if(b&1) aux*=a,aux%=MOD,--b;
    else a*=a,a%=MOD,b/=2;

    return aux;
}

int main()
{
  ifstream cin("ssnd.in");
  ofstream cout("ssnd.out");

  for(i=2;i<=1000000;++i)
  if(!a[i]) for(j=i+i,b[++m]=i;j<=1000000;j+=i) a[j]=1;

  for(cin>>t;t;--t)
  {
    cin>>n; nr=sum=1;
    for(j=1;b[j]<=n && j<=m && n>1;++j,d=0)
    if(!(n%b[j])) 
    {
      while(!(n%b[j]) && n>1) ++d,n/=b[j];
      nr*=d+1; nr%=MOD;
      sum*=(Pow(b[j],d+1)-1+MOD)%MOD; sum%=MOD;
      sum*=Pow(b[j]-1,MOD-2); sum%=MOD;
    }
    cout<<nr<<' '<<sum<<'\n';
  }
    
 return 0;
}