Cod sursa(job #1453157)

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

const int MOD=9973;

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

long long Pow(long long a,int b) {
    long long 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;1LL*b[j]*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; sum%=MOD;
      sum*=Pow(b[j]-1,MOD-2); sum%=MOD;
    }

    if(n>1) nr*=2,nr%=MOD,sum*=n+1,sum%=MOD;

    cout<<nr<<' '<<sum<<'\n';
  }
    
 return 0;
}