费马小定理
Posted charls
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了费马小定理相关的知识,希望对你有一定的参考价值。
链接:https://ac.nowcoder.com/acm/problem/205461
王子连接的国服终于上线啦~
已知王子连接的抽卡系统如下:
共有 个卡池,第 个卡池共有 种卡,每张卡的出货率都是相等的(也就是说该卡池单次抽卡,每种卡出货率是 1/ai1/a_i1/ai? )。
第 个卡池中,你有 种卡是自己很想要的。
现在的问题是,如果每个卡池里都单抽一次,能抽到自己想要的卡的概率是多少?
可以证明,这个概率一定可以写成 形式的分数。最后输出该分数在模 109+710^9+7109+7意义下的值就可以了。
即输出满足 b∗x%1000000007=ab*x\%1000000007=ab∗x%1000000007=a 的最小非负整数 。
已知王子连接的抽卡系统如下:
共有 个卡池,第 个卡池共有 种卡,每张卡的出货率都是相等的(也就是说该卡池单次抽卡,每种卡出货率是 1/ai1/a_i1/ai? )。
第 个卡池中,你有 种卡是自己很想要的。
现在的问题是,如果每个卡池里都单抽一次,能抽到自己想要的卡的概率是多少?
可以证明,这个概率一定可以写成 形式的分数。最后输出该分数在模 109+710^9+7109+7意义下的值就可以了。
即输出满足 b∗x%1000000007=ab*x\%1000000007=ab∗x%1000000007=a 的最小非负整数 。
输入描述:
第一行输入一个正整数
。
第二行输入 个正整数 aia_iai?。
第三行输入 个正整数 bib_ibi? ,代表第 个卡池的你想要的卡种类数量。
输出描述:
一个整数,表示该概率在模 109+710^9+7109+7 意义下的值。
示例1
说明
能抽到自己想要的卡的概率是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-没抽到)
目前求的是没抽到的逆元,故要再转化一下。 }
以上是关于费马小定理的主要内容,如果未能解决你的问题,请参考以下文章