首页 > 编程语言 >对质数取模结果(扩展欧几里得算法模板)爬树甲壳虫

对质数取模结果(扩展欧几里得算法模板)爬树甲壳虫

时间:2023-01-25 12:11:07浏览次数:41  
标签:取模 int 质数 dy ans ll 模板 MOD

问题描述

有一只甲壳虫想要爬上一颗高度为 �n的树,它一开始位于树根,高度为 00,

当它尝试从高度 �−1i−1 爬到高度为 �i 的位置时有 ��Pi​ 的概率会掉回树根,求它从树根爬到树顶时,经过的时间的期望值是多少。

输入格式

输入第一行包含一个整数 �n表示树的高度。

接下来 n 行每行包含两个整数 ��xi​, ��yi​,用一个空格分隔,表示 ��=����Pi​=yi​xi​​。

输出格式

输出一行包含一个整数表示答案, 答案是一个有理数, 请输出答案对质 数 998244353 取模的结果。

其中有理数 ��ba​ 对质数 �P 取模的结果是整数 �c 满足 0≤�<�0≤c<P 且 �⋅�≡�(mod�)c⋅b≡a(modP) 。

样例输入 1

1
1 2
 

样例输出 1

2
 

样例输入 2

3
1 2
3 5
7 11
 

样例输出 2

623902744
 

评测用例规模与约定

对于 2020 的评测用例, �≤2,1≤��<��≤20n≤2,1≤xi​<yi​≤20;

对于 5050 的评测用例, �≤500,1≤��<��≤200n≤500,1≤xi​<yi​≤200;

对于所有评测用例, 1≤�≤100000,1≤��<��≤1091≤n≤100000,1≤xi​<yi​≤109 。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
const int MOD = 998244353;
ll x[maxn], y[maxn];

//快速幂模板
ll ksm(ll a, ll b, ll m)
{
    ll ans = 1;
    while(b)
    {
        if(b & 1)ans = ans * a % m;
        b >>= 1;
        a = a * a % m;
    }
    return ans;
}
//求模MOD意义下的x的逆元
ll inv(ll x)
{
    return ksm(x, MOD - 2, MOD);
}
//扩展欧几里得模板
//求解cx+dy = gcd(c, d)的解,返回值为gcd(c, d)
ll extgcd(ll c, ll d, ll&x, ll&y)
{
    ll g = c;
    if(d)
    {
       g = extgcd(d, c % d, y, x);
       y -= (c / d) * x;
    }
    else x = 1, y = 0;
    return g;
}

int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> x[i] >> y[i];
    ll a = 0, b = 0;
    for(int i = n; i >= 1; i--)
    {
        ll p = x[i] * inv(y[i]) % MOD, p_1 = (y[i] - x[i]) * inv(y[i]) % MOD;
        a = (p + p_1 * a) % MOD;
        b = (1 + p_1 * b) % MOD;
    }
    //求解cx + dy = e
    ll c = a - 1, d = MOD, e = MOD - b, x, y;
    //先求解cx + dy = gcd(c, d)
    ll g = extgcd(c, d, x, y);
    //再求解cx + dy = e
    ll ans_x = x * e / g;
    cout<<(ans_x % MOD + MOD ) % MOD<<endl;
    return 0;
}

 

标签:取模,int,质数,dy,ans,ll,模板,MOD
From: https://www.cnblogs.com/weinan030416/p/17066834.html

相关文章

  • 常用哈希质数
    61,83,113,151,211,281,379,509683,911/一千以下1217,1627,2179,2909,3881,......
  • 数位DP及模板
    数位DP:一般来说数位DP有两种写法:1.for循坏枚举DP2.记忆化搜索+DP这里详细将记忆化搜索+DPDFS状态:常见的dfs状态有三个:1.枚举到第几位(POS)2.判断前面是否紧贴上限(LIMI......
  • 【题解】P5787 二分图 /【模板】线段树分治
    概念线段树分治是一种用于维护时间轴等的离线算法,本质上是通过维护时间轴的连续区间得到某一时刻的状态。时间复杂度和普通线段树相同,空间复杂度为\(O(n\logn)\)例题......
  • 一文解决如何使用 C 语言判断质数(素数)[ 附解析与源码 ]
    前言质数历来都是数学界的宠儿,是数学里神秘的谜团。质数又和C语言有着不解之缘,本篇文章将讲解如何用C语言判断质数。为了方便大家在读完此文章后使用文中程序,我会将......
  • 【模板】网络最大流 Dinic(多路增广+当前弧优化)
    #include<bits/stdc++.h>usingnamespacestd;constintN=5e5+5;constintM=1e6+5;constintMN=1e3+5;typedeflonglongll;inlineintread(){intx(0),f(0......
  • 质数距离
    质数距离给定两个整数$L$和$U$,你需要在闭区间$[L,U]$内找到距离最接近的两个相邻质数$C_1$和$C_2$(即$C_2−C_1$是最小的),如果存在相同距离的其他相邻质数对,则输......
  • vue.js客服系统实时聊天项目开发(七)ES6模板字符串进行字符串变量内嵌拼接
    在开发客服系统的时候进行字符串拼接的太多,可以使用模板字符串处理你可以使用ES6中的模板字符串来实现这个功能。模板字符串是用反引号(`)括起来的字符串,其中变量可以使用${......
  • 高精模板
    #include<algorithm>usingstd::min;usingstd::max;typedefunsignedlonglongull;typedeflonglongll;constexprullBASE=100000000;constexprunsignedL......
  • 07-模板模式
    07-模板模式概念模板模式是一种常见的设计模式,在实现中经常可以看到,具体的使用场景为:整体流程大致相同,其中有部分方法实现不同。例子本文给出《大话设计模式》书中的例......
  • vue项目中components组件(模板)的使用和传值
    在项目开发过程中,我们经常会遇到重复代码结构,比如页面的头部、底部等,通常我们都是作为模板或者公共文件进行设计使用,在vue中,我们可以使用components组件(模板)来实现。下面我......