Cod sursa(job #1901240)

Utilizator Vlad3108Tir Vlad Ioan Vlad3108 Data 3 martie 2017 20:30:04
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
#include <bitset>
#define LMAX 1000000
#define PRIMES 80000
#define MOD 9973
using namespace std;
bitset <LMAX+5> ciur;
int P[PRIMES+5],k;
void GenPrimes(){
	int	i,d;
	for(i=4;i<=LMAX;i+=2)
		ciur[i]=1;
	for(d=3;d*d<=LMAX;d+=2)
		if(!ciur[d])
			for(i=d*d;i<=LMAX;i+=2*d)
				ciur[i]=1;
	P[k=1]=2;
	for(i=3;i<=LMAX;i+=2)
		if(!ciur[i])
			P[++k]=i;
}
int main(){
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	int n,i,j,e,S,no;
	long long x;
	GenPrimes();
	scanf("%d",&n);
	for(i=1;i<=n;++i){
		S=1;no=1;
		scanf("%lld",&x);
		for(j=1;j<=k&&(long long)P[j]*P[j]<=x;++j){
			e=0;
			while(x%P[j]==0){
				x/=P[j];
				e++;
			}
			if(e){
				e++;
				no*=e;
				no%=MOD;
				long long Pow=1;
				for(int c=1;c<=e;++c)
						Pow*=P[j];
				Pow=(Pow-1)/(P[j]-1);
				Pow%=MOD;
				S*=Pow;
				S%=MOD;
			}
		}
		if(x>1){
			no*=2;
			S*=(x+1);
			no%=MOD;
			S%=MOD;
		}
		printf("%d %d\n",no,S);
	}
	fclose(stdin),fclose(stdout);
    return 0;
}