Pagini recente » Cod sursa (job #1563643) | Rating Stroescu Matei Alexandru (gripz) | Cod sursa (job #1573973) | Cod sursa (job #2764288) | Cod sursa (job #2210098)
#include<fstream>
#include <bitset>
#include<math.h>
# define MAX 1000005
using namespace std;
const int MOD=9973;
bitset <MAX> isPrime;
//bool isPrime[MAX+1];
long long primes[MAX+1];
int k;
void ciurulLuiEratostene(){
int i, j;
for(i=2;i<=sqrt(MAX);i++){
if(isPrime[i]==0){
primes[++k]=i;
for(j=i*i*1LL;j<=MAX;j+=i)
isPrime[j]=1;
}
}
for(i=sqrt(MAX)+1; i<=MAX; i++)
if(isPrime[i]==0) primes[++k]=i;
}
long long logAB(long long a,long long &n, long long &s){
long long aux=a, auxN=n;
long long p=0;
s=1;
while(n%aux==0){
s=(s+aux%MOD)%MOD;
p++;
aux*=a*1LL;
auxN=auxN/a;
}
n=auxN;
return p;
}
int main(){
FILE *in=fopen("ssnd.in","r"), *out=fopen("ssnd.out","w");
int t, i, j;
long long n, d, nrDiv, sumDiv, s;
ciurulLuiEratostene();
fscanf(in,"%i",&t);
for(i=1;i<=t;i++){
fscanf(in,"%lld",&n);
nrDiv=1, sumDiv=1;
j=1;
for(j=1; j<=k && 1LL*j*j<=n;j++){
if(n%primes[j]==0){
d=logAB(primes[j],n,s);
nrDiv*=(d+1)*1LL;
sumDiv=1LL*sumDiv*(s%MOD)%MOD;
}
}
if(n>1) {
nrDiv*=2*1LL;
sumDiv*=(1+n%MOD)*1LL%MOD;
}
fprintf(out,"%lld %lld\n",nrDiv,sumDiv);
}
fclose(in); fclose(out);
return 0;
}