Cod sursa(job #1144795)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 17 martie 2014 17:01:50
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#define ro 9901
using namespace std;
ifstream fi("sumdiv.in");
ofstream fo("sumdiv.out");

int p1,p2,sd=1;
int a,b,i,d;

int exponentiere(int a,int n){
    int p=1;
    
    while(n){
             if(n%2) p=(p*a)%ro;
             a=(a*a)%ro; 
             n/=2;
            }
            
    return p;
}

int main(){
    fi>>a>>b; 
    
    for(i=2;i*i<=a;i++)
    if(!(a%i)){
               d=0;
               while(!(a%i)){ a/=i; d++; }
               d*=b;
               
               p1=(exponentiere(i%ro,d+1)-1+ro)%ro;
               //invers modular
               p2=exponentiere((i-1)%ro,ro-2)%ro;
               sd=(((sd*p1)%ro)*p2)%ro; 
              }
    
    if(a>1){
            i=a; d=1;
            d*=b;
            
            p1=(exponentiere(i%ro,d+1)-1+ro)%ro;
            if(!p1) sd=(1LL*sd*(b+1))%ro;
            else{ 
                 p2=exponentiere((i-1)%ro,ro-2)%ro;
                 sd=(((sd*p1)%ro)*p2)%ro; 
                }
           }

    fo<<sd;
    
    fi.close();
    fo.close();
    return 0;
}