Cod sursa(job #1472452)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 17 august 2015 07:22:58
Problema Suma si numarul divizorilor Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h>
int o,l,p[1000000],k,i,j,q,r,x[1000000];
long long n,t,s;
int main() {
	freopen("ssnd.in","r",stdin),freopen("ssnd.out","w",stdout),scanf("%d",&o),x[++k]=2;
	for(i=1;((i*i)<<1)+(i<<1)<=1000000;i++)
	if(!(p[i>>3]&(1<<(i&7))))
      	for(j=((i*i)<<1)+(i<<1);(j<<1)+1<=1000000;j+=(i<<1)+1)
            p[j>>3]|=(1<<(j&7));
	for(i=1;2*i+1<1000000;++i)
	if(!(p[i>>3]&(1<<(i&7))))
      	x[++k]=2*i+1;
	while(o--) {
		scanf("%lld",&n);
      	for(i=s=l=1,t=n;t>1&&x[i]*x[i]<=t;i++) {
		  	for(j=0;t%x[i]==0;j++,t/=x[i]);
            if(j) {
				l*=(j+1);
                if(j==1)
                	s*=(x[i]+1);
                else {
                    for(q=x[i]+1,r=1;r<j;r++)
                        q=q*x[i]+1;
                    s*=q;
				}
			}
		}
      	if(t>1)
            l*=2,s*=(t+1);
      	if(s==1)
            l=2,s+=n;
      	printf("%d %lld\n",l,s%9973);
	}
}