感觉思路也没问题啊,求大佬帮忙看看,代码也很短的。
#include <bits/stdc++.h>
using namespace std;
long long n,m,p[31],ans;
const long long mod = 376544743;
void dfs(int x,int step);
int main( ) {
cin >> n >> m;
for(int i = 1;i <= n;i++) cin >> p[i];
for(int i = 1;i <= n;i++) {
dfs(i,1);
}
cout << ans;
return 0;
}
void dfs(int x,int step) {//从第x个数开始,取step个数
long long p0 = 1;
for(int i = x;i < x+step;i++) {
p0 *= p[i];
if(p0 > m) return;
}
long long t = m/p0;
long long sum = ((1+t)*t/2)%mod*p0;
sum = sum %mod;
if(step%2 == 1) ans += sum;
else ans -= sum;
ans %=mod;
if(x+step <= n) {
dfs(x,step+1);
}
}