码迷,mamicode.com
首页 > 其他好文 > 详细

费马小定理

时间:2020-05-19 01:05:12      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:ace   blank   系统   str   span   mat   clip   was   ret   

链接:https://ac.nowcoder.com/acm/problem/205461

王子连接的国服终于上线啦~
已知王子连接的抽卡系统如下:
共有 技术图片 个卡池,第 技术图片个卡池共有技术图片 种卡,每张卡的出货率都是相等的(也就是说该卡池单次抽卡,每种卡出货率是 1/ai1/a_i1/ai? )。
技术图片 个卡池中,你有 技术图片 种卡是自己很想要的。
现在的问题是,如果每个卡池里都单抽一次,能抽到自己想要的卡的概率是多少?
可以证明,这个概率一定可以写成 技术图片 形式的分数。最后输出该分数在模 109+710^9+7109+7意义下的值就可以了。
即输出满足 b∗x%1000000007=ab*x\%1000000007=abx%1000000007=a 的最小非负整数 技术图片

输入描述:

第一行输入一个正整数 

技术图片

第二行输入 技术图片 个正整数 aia_iai?
第三行输入 技术图片 个正整数 bib_ibi? ,代表第 技术图片 个卡池的你想要的卡种类数量。技术图片
 

输出描述:

一个整数,表示该概率在模 109+710^9+7109+7 意义下的值。
示例1

输入

复制
2
3 4
1 1

输出

复制
500000004

说明

能抽到自己想要的卡的概率是1/2,由于2*500000004%1000000007=1,故输出500000004。

感觉就是费马定理的一道模板题

https://blog.csdn.net/slongle_amazing/article/details/50669001

需要用到快速幂的知识点
#include<bits/stdc++.h>
using namespace std;
int n;
long long a[100005];
int mod=1e9+7;
long long qmi(long long ans,long long p){
    long long temp=1;
    while(p){
        if(p&1) temp=temp*ans%mod;
        ans=ans*ans%mod;
        p>>=1;
    }
    return temp;
}
int main()
{
    cin>>n;
    long long ans=1;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    long long temp;
    for(int i=0;i<n;i++)
    {
        cin>>temp;
        ans=ans*(a[i]-temp)%mod*(qmi(a[i],mod-2))%mod;
    }
    cout<<(1-ans+mod)%mod<<endl;//因为求的是b/a=(1-没抽到)
目前求的是没抽到的逆元,故要再转化一下。 }

 



费马小定理

标签:ace   blank   系统   str   span   mat   clip   was   ret   

原文地址:https://www.cnblogs.com/Charls/p/12913878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!