Codeforces 300C Beautiful Numbers 乘法逆元

题目链接:http://codeforces.com/contest/300/problem/C

题意:

题意忘了。

总之暴力枚举x

乘法逆元:

在mod==prime时(mod为素数)则存在以下等式

(a / b)%mod  =  a * (b^(mod-2))

#include <iostream>
#include <cstdio>
using namespace std;
#define ll __int64
ll a,b,n,f[1000010],Mod=1000000007,res;
ll Pow(ll x ,ll p){
    ll ans = 1;
	while(p){
		if(p&1)ans = (ans*x)%Mod;
		p>>=1;
		x = (x*x)%Mod;
	}
	return ans;
}
bool Good(ll x){
    while(x!=0){
        if( (x%10)!=a && (x%10)!=b ) return 0;
        x/=10;
    }
    return 1;
}
int main()
{
    scanf("%I64d %I64d %I64d",&a,&b,&n);
    f[0]=1;
    for(ll i=1;i<=n;i++)
        f[i]=(f[i-1]*i)%Mod;
    for(ll i=0;i<=n;i++)
    {
        ll sum =  ( (a*i)+(b*(n-i)) )%Mod;
        if(Good(sum)==1)
        {
            ll z=(f[n-i]*f[i])%Mod;

			res= ( res+(f[n]*(Pow(z,Mod-2)%Mod)) ) %Mod;
        }
    }
    printf("%I64d",res%Mod);
    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值