https://www.acwing.com/problem/content/99/
假设现在有两个自然数A和B,S是AB的所有约数之和。
请你求出S mod 9901的值是多少。
输入格式
在一行中输入用空格隔开的两个整数A和B。
输出格式
输出一个整数,代表S mod 9901的值。
数据范围
0≤A,B≤5×107,0≤A,B≤5×107
输入样例:
2 3
输出样例:
15
注意: A和B不会同时为0。
#include <bits/stdc++.h> #define int long long using namespace std; const int p = 9901; int a,b; int power(int a,int b){ int ans = 1 % p; for(;b;b>>=1){ if(b & 1) ans = ans * a % p; a = a * a % p; } return ans; } int sum(int z,int c){ if(!c) return 1; if(c & 1) return (1 + power(z,(c + 1) >> 1)) * sum(z,(c - 1) >> 1) % p; return ((1 + power(z,c >> 1)) * sum(z,(c >> 1) - 1) % p + power(z,c)) % p; } signed main(){ // freopen("in","r",stdin); ios::sync_with_stdio(0); cin >> a >> b; int ans = 1; for(int i = 2; i <= a; i++){ int s = 0; while (a % i == 0){ s++; a /= i; } if(s) ans = ans * sum(i,s*b) % p; } if(!a) ans = 0; cout << ans; return 0; }