Cod sursa(job #432967)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 3 aprilie 2010 00:32:03
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<fstream>
#include<cstdio>
#include<vector>
#include<cmath>
#define pb push_back
#define maxn 100004
#define infi 2100000000
using namespace std;

int n, ciur[maxn], modulo=9973;

int main()
{
    int i, j, T;
    ifstream fin("ssnd.in");
    freopen("ssnd.out", "w", stdout);
    char *v ;
	int r;
	n=maxn;
	v= new char[n+1];
	for(i=0;i<=n;i++)
		ciur[i]=1;
	i=2;
	for(j=2;j*i<=n;j++)
        ciur[i*j] = 0;
	for(i=3;i<=n;i+=2)
		if(ciur[i]==1)
			for(j=2;j*i<=n;j++)
				ciur[i*j] = 0;
    fin>>T;
    while(T--)
    {
        int s=1, rez=1, nr;
        fin>>n;
        int copy=n;
        for(i=2;i<=n/2;i++)
            if(ciur[i] && n%i==0)
            {
                nr=0;//i de nr ori
                while(copy%i==0)
                    copy/=i, nr++;
                //printf("%d %d\n", i ,nr );
                s*=((int(pow(double(i), nr+1)))-1)/(i-1);
                rez*=(nr+1);
            }
        if(ciur[n])
        {
            nr=1;
            i=n;
            s*=((int(pow(double(i), nr+1)))-1)/(i-1);
            rez*=(nr+1);
        }
        //printf("\n");
        printf("%d %d\n", rez, s%modulo);
    }
    return 0;
}