版权声明:沃斯里德小浩浩啊 https://blog.csdn.net/Healer66/article/details/83932086
链接:
https://vjudge.net/contest/269397#problem/D
题意:
给出n位数,和一个数m,问有多少种切割方法,使得n切割出来的数都能被m整除
思路:
如果两部分都能被m整除,那么和起来一定也能
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
const int maxn = 3e5+5;
char a[maxn];
ll qpow(ll x,ll m)
{
ll ans = 1;
while(m)
{
if(m&1)
{
ans*=x;
ans %= mod;
}
x*=x;
x%=mod;
m/=2;
}
return ans;
}
int main()
{
ll n,m,num = 0;
cin>>n>>m;
cin>>a;
ll x = 0;
for(int i = 0; i < n; i ++)
{
x*=10;
x +=a[i] - '0';
x%=m;
if(x == 0) num ++;
}
ll ans ;
if(x == 0)
ans = qpow(2,num-1);
else
ans = 0;
cout<<ans<<endl;
return 0;
}