Cod sursa(job #431697)
| Utilizator | Data | 1 aprilie 2010 12:19:03 | |
|---|---|---|---|
| Problema | Suma divizorilor | Scor | 30 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.52 kb |
#include<fstream>
#include<math.h>
using namespace std;
int p[25000000];
int main() {
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
long long i,j,n,a,b;
fin>>a>>b;
while (a%2==0) {
a /= 2;
p[0]++;
}
for (i = 3; a>1 ; i+=2) {
while (a%i==0) {
a /= i;
p[i/2]++;
}
}
n = (long long)pow(2,(double)(p[0]*b+1)) - 1;
for (j=3;j<=i;j+=2)
if (p[j/2])
n *= (long long) (pow((double)j,(double)(p[j]*b+1)) - 1) / (j-1);
fout<<n%9901;
fin.close();
fout.close();
return 0;
}
