Cod sursa(job #951485)

Utilizator costyrazvyTudor Costin Razvan costyrazvy Data 20 mai 2013 18:44:32
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#define nmax 1000005
#define mod 9973
//#include <cmath>
using namespace std;
int p,d,i,j,k,v[500000],n,m;
bool prim[nmax];
unsigned long long sum,num,nrd,numa,x;
inline int pow(int x, int p) {
    int rez=1;
    x%=mod;

    for(;p;p>>=1) {
        if(p&1) {
            rez*=x;
            rez%=mod;
        }

        x*=x;
        x%=mod;
    }

    return rez;
}
int main()
{
    ifstream f("ssnd.in");
    ofstream g("ssnd.out");
    f>>n;
    prim[2]=true;
    for (i=3;i<=nmax;i++) if (i%2==1) prim[i]=true;
    for (i=2;i<=nmax;i++)
         if (prim[i]==true)
         {   k++;
             v[k]=i;
             for (j=2*i;j<=nmax;j+=i)
                 prim[i]=false;
         }
    for (i=1;i<=n;i++)
    {
        f>>x;nrd=1;sum=1;m=x;num=1;
          for (j=1;j<=m && x>1;j++)
            { d=0;p=1;
                while (x%v[j]==0 && x>1)  x=x/v[j],d++;
                if (d>0)
                 {
                     numa=int(pow(v[j],d+1)-1)%mod;
                     sum=sum*numa;
                     num=num*(v[j]-1);
                     nrd=nrd*(d+1);
                }
            }
       if (nrd>1) g<<nrd<<" "<<int(sum/num)<<'\n';
    }
    f.close();
    g.close();
    return 0;
}