要利用求一个数的因子个数公式,求一个数的因子和公式,立方和公式,质因子分解,推出最终答案。
∏
i
=
1
c
n
t
(
B
∗
p
i
+
1
)
2
(
B
∗
p
i
+
2
)
2
4
%
m
o
d
\prod_{i=1}^{cnt}{\frac{(B*p_i+1)^2(B*p_i+2)^2}{4}}\%mod
i=1∏cnt4(B∗pi+1)2(B∗pi+2)2%mod
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int mod = 10007;
const int N = 1e4+10;
ll p[N], prime[N], m;
ll fac[N], tot;
void primes(ll n){
for(ll i = 2; i <= n; i++){
if(!p[i]) p[i] = i, prime[++m] = i;
for(ll j = 1; j <= m; j++){
if(prime[j] > p[i] || prime[j] > n/i) break;
p[i*prime[j]] = prime[j];
}
}
//for(int i = 1; i <= 100; i++) cout << prime[i] << endl;
}
void fac_div(ll n){
ll t = n;
tot = 0;
for(int i = 1; i <= m && prime[i]*prime[i] <= n; i++){
if(t%prime[i]==0){
fac[++tot] = 0;
while(t%prime[i]==0){
fac[tot]++;
t /= prime[i];
}
}
if(t == 1) break;
}
if(t > 1) {
fac[++tot] = 1;
}
}
ll a, b;
int main(){
primes(2e3);
int cas = 0;
while(cin >> a >> b){
fac_div(a);
ll ans = 1ll%mod;
for(int i = 1; i <= tot; i++){
ll s = ((b*fac[i]+1)*(b*fac[i]+2)/2)%mod;
s = s*s%mod;
ans = ans*s%mod;
}
printf("Case %d: %lld\n", ++cas, ans);
}
return 0;
}