Cod sursa(job #409707)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 3 martie 2010 20:15:53
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
#include <bitset>
using namespace std;
const int L=1000500,mod=9973;
bitset <L> m;
int p[100000];

int main(){
  freopen("ssnd.in","r",stdin); freopen("ssnd.out","w",stdout);
  int T,i,j,k,q,r1;
  long long x,r2,s,t;
  //preprocessing
  p[1]=2;q=1;
  for (i=3;i<L;i+=2)if (!m[i]){p[++q]=i;for (j=3*i;j<L;j+=i<<1)m[j]=1;}
  //
  scanf("%d",&T);
  while (T--){
    scanf ("%lld\n",&x);
    j=r1=r2=1;
    while ((long long)p[j]*p[j]<=x){
      s=t=1;k=0;
      while (x%p[j]==0){ x/=p[j]; k++; s=(s*p[j])%mod; t=(t+s)%mod; }
      r1*=k+1; r2=(r2*t)%mod;
      j++;
    }
    if (x>1){ r1<<=1; r2=(r2*(x+1))%mod;}
    printf ("%d %lld\n",r1,r2);
  }
return 0;
}