Cod sursa(job #711548)

Utilizator ms-ninjacristescu liviu ms-ninja Data 12 martie 2012 12:35:03
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <bitset>
using namespace std;

#define dim 1000003
#define mod 9973
bitset<dim> v;
int q[78500];

int main()
{
	long long i, j, t, n, nr, s,aux;
	long long unsigned p, div;
	ifstream fin("ssnd.in");
	ofstream fout("ssnd.out");
	
	fin>>t;
	int f=0;
	q[0]=2;
	for(i=2;i<=1000000;++i)
	{
		++i;
		if(v[i]==0)
		{
			q[++f]=i;
			for(j=i;j<=1000000/i;++j)
			{
					v[i*j]=1;
					++j;
			}
		}
	}
	for(;t;--t)
	{
		fin>>n;
		s=div=1;
		aux=n;
		
		int j=0;
		while(n>1)
		{
			
			if(n%q[j]==0)
			{
				nr=0;p=1;
				while(n%q[j]==0)
				{
					++nr;
					p*=q[j];
					n/=q[j];
				}
				p*=q[j];
				div*=(nr+1);
				s*=((p-1)/(q[j]-1));
				s%=mod;
			}
			if(q[j]*q[j]>n && n>1)
			{
				long long fufu=n*n-1;
				div*=2;
				s*=(fufu)/(n-1);
				s%=mod;
				n=1;
			}
			++j;
		}
		fout<<div <<" " <<s <<'\n';
				
	}
	
	return 0;
}