Cod sursa(job #2457624)

Utilizator kywyPApescu tiGEriu kywy Data 18 septembrie 2019 11:36:08
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include<cstdio>
#include<cmath>
#define N 1000007
#define MOD 9973
using namespace std;
 
FILE* in=fopen("ssnd.in", "r");
FILE* out=fopen("ssnd.out", "w");
bool c[N];
int nrp[80007];
 
int ct;
void ciur()
{
	for(int i=2; i<=N; ++i)
	{
		if(!c[i])
		{
			nrp[++ct]=i;
			if(1LL*i*i<=N)
				for(int j=i*i; j<=N; j+=i)
					c[j]=1;
		}
	}
}
 
int main()
{
	int n;
	fscanf(in, "%d", &n);
	ciur();
	printf("%d", ct);
	for(int i=1; i<=n; ++i)
	{
		int r1=1, r2=1;
		long long x;
		ct=0;
		fscanf(in, "%lld", &x);
		int tmp=x;
		while(x>1)
		{
			int exp=0;
			++ct;
			if(nrp[ct]*nrp[ct]>tmp) break;
			while(x%nrp[ct]==0)
			{
				x/=nrp[ct];
				++exp;
			}
			r1=r1*(exp+1);
			long long a=1;
			for(int j=1; j<=exp+1; ++j)
			{
				a*=nrp[ct];
			}
			if(exp>0)
			{
				a=a-1;
				a=a/(nrp[ct]-1);
				a%=MOD;
				r2*=a;
				r2%=MOD;
			}
		}
		if(x>1) 
		{
			r1*=2;
			r2=r2*(x*x-1)/(x-1);
		}
		fprintf(out, "%d %d\n", r1, r2);
	}
}