Cod sursa(job #1625921)

Utilizator robertstrecheStreche Robert robertstreche Data 2 martie 2016 21:22:17
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <bitset>

#define MOD 9973
#define NUMAR 500005
#define VALMAX 1000000

using namespace std;

bitset <VALMAX+5>ap;

long long val;
int t,prime[NUMAR];

int ciur(){
   prime[++prime[0]]=2;
   for (int i=3;i<=VALMAX;i+=2)
      if (!ap[i]){
         prime[++prime[0]]=i;
         for (long long j=1LL*i*i;j<=VALMAX;j+=i)ap[j]=1;
      }
}

int main()
{
   freopen("ssnd.in","r",stdin);
   freopen("ssnd.out","w",stdout);

   ciur();
   for (scanf("%d\n",&t);t;t--){
      scanf("%lld\n",&val);

      long long numar=1,sol=1;
      for (int i=1;prime[i]*prime[i]<=val;i++){
         long long p=0,putere=1;
         while (val%prime[i]==0){
            putere*=1LL*prime[i];
            val/=prime[i];
            p++;
         }

         if (p){
            sol=(1LL*sol*(1LL*putere*prime[i]-1)/(prime[i]-1))%MOD;
            numar*=(p+1);
         }
      }

      if (val>1){
         numar*=2;
         sol=(sol*(val*val-1)/(val-1))%MOD;
      }
      printf("%lld %lld\n",numar,sol);
   }

   fclose(stdin);
   fclose(stdout);
}