Pagini recente » Cod sursa (job #2785456) | Cod sursa (job #293819) | Cod sursa (job #2486002) | Cod sursa (job #381305) | Cod sursa (job #772747)
Cod sursa(job #772747)
#include<stdio.h>
FILE *f=fopen("ssnd.in","r"),*g=fopen("ssnd.out","w");
long int t,prime[80001],nrpr=0;
void ciur(){
long int i,j;
bool p[1000001];
for(i=2; i<=1000001; i++){
if(p[i]==0){
nrpr++; prime[nrpr]=i;
//nr++;
for(j=i+i; j<=1000001; j=j+i){
p[j]=1;
}
}
}
/*for(i=1; i<=29; i++){
printf("%ld ",prime[i]);
}*/
}
void afla_divizorii(long int n){
long int i=1,nrd=1,p=1,put=0,s=1,n1=n;
while(n!=1 && i<=nrpr && prime[i]*prime[i]<=n1){
if(n%prime[i]==0){
//printf("divizorul %ld\n",prime[i]);
put=0;//puterea la care apare factorul prime[i]
p=1; //produsul celor put+1 factori
while(n%prime[i]==0){
put++;
p=p*prime[i];
n=n/prime[i];
//printf("%ld %ld %ld\n",put,p,n);
}
p=p*prime[i];
nrd*=put+1;
s=(s*(p-1)/(prime[i]-1))%9973;
}
i++;
}
if(n!=1){
nrd=2;
s=(n*n-1)/(n-1);
}
fprintf(g,"%ld %ld\n",nrd,s%9973);
}
void read(){
long int i,n;
fscanf(f,"%ld\n",&t);
for(i=1; i<=t; i++){
fscanf(f,"%ld\n",&n);
afla_divizorii(n);
}
}
int main(){
ciur();
read();
return 0;
}