题解 P2613 【【模板】有理数取余】
我们先看这个式子:
$c=\dfrac{a}{b}$ $ $ $ $ $mod$ $ $ $ $ $19260817$
某正常高中生:这$……$
---
对于这个 $c$ 。
显然,它很可能是小数。
那么, $double$ 的取余你老师讲过么$?!!!$
所以,我们要~~化简~~魔改一下这个式子。
---
$$c=\dfrac{a}{b}=a*b^{-1}$$
又因为是 $mod$ $ $ $p=19260817$ 的意义下的计算。
所以,现在就有了一种化小数为整数的方法:
乘法逆元
$c=a*b^{-1}≡a*b^{p-2}$ $ $ $ $ $ mod $ $ $ $ $ $ p $
而在这里, $ p $ $ = $ $ 19260817 $
并且,当 $b^{p-2}≡0$ $ $ $ $ $ mod $ $ $ $ $ $ p $ 时,
分母为 $0$ ,无解。
所以答案就出来了。
---
好了,天真的认为我~~们~~以为这样就行了。
然而$……$
$0≤a,b≤10^{10001}$
高精模低精按位先模到 $int$ 或 $long$ $ $ $ long$ 以内,在做。
然后调了三天终于$A$了。
---
本宝宝在这里在吐槽一番:
定义变量忘了初始化$……$
数据出锅玄学$RE$ $……$
也是没谁了。
---
上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int p=;
int a[];
int b[];
char a1[];
char b1[];
int l1,l2;
int len1,len2;
long long x,y; long long pow2(long long a,long long b)
{
long long res=;
for(;b;b>>=,a=a*a%p) if(b&) res=res*a%p;
return res%p;
} void calculet_1()
{
long long num=;
for(int i=len1;i<=len1+;i++)
num*=,num+=a[i]; num%=p;
for(int i=len1+;i>=len1;i--)
{
int now=num%;num/=;
a[i]=now;
} for(int i=;i<=;i++) if(a[len1+i]!=){len1+=i;break;}
} void calculet_2()
{
long long num=;
for(int i=len2;i<=len2+;i++)
num*=,num+=b[i];
num%=p;
for(int i=len2+;i>=len2;i--)
{
int now=num%;num/=;
b[i]=now;
} for(int i=;i<=;i++) if(b[len2+i]!=){len2+=i;break;}
} signed main()
{
// freopen("testdata.in","r",stdin);
// freopen("1.out","w",stdout); scanf("%s",a1);
scanf("%s",b1);
// printf("%s\n",b1);
l1=strlen(a1);
l2=strlen(b1);//输入以及处理数据。 for(int i=;i<l1;i++)
a[i]=a1[i]-'';
for(int i=;i<l2;i++)
b[i]=b1[i]-'';//将char 变int(个人不习惯用char做运算) while(l1-len1>=) calculet_1();
while(l2-len2>=) calculet_2();//计算,我是从高位到低位依次减的,可以省时间。 for(int i=len1;i<l1;i++) x*=,x+=a[i];
for(int i=len2;i<l2;i++) y*=,y+=b[i];
x%=p;y%=p;//计算取模之后的值。 // printf("%lld\n",y);
if(x==){puts("");return ;}
if(y==){puts("Angry!");return ;}//特判 long long ans=pow2(y,p-);
// printf("%lld\n",ans);
ans=(ans*x)%p; printf("%lld",ans);//计算答案和输出
return ;//程序拜拜
}
题解 P2613 【【模板】有理数取余】的更多相关文章
- [洛谷P2613] [模板] 有理数取余
刷水题. 传送门 看似高精而非高精乃是此题最大亮点. 边读边取模技能get~ #include<cstdio> #define ll long long #define mod 19260 ...
- 洛谷 P2613 【模板】有理数取余
P2613 [模板]有理数取余 题目描述 给出一个有理数c=\frac{a}{b}c=ba,求c\ \bmod 19260817c mod19260817的值. 输入输出格式 输入格式: 一共两行. ...
- 洛谷——P2613 【模板】有理数取余
P2613 [模板]有理数取余 读入优化预处理 $\frac {a}{b}\mod 19620817$ 也就是$a\times b^{-1}$ $a\times b^{-1}\mod 19620817 ...
- P2613 【模板】有理数取余 (数论)
题目 P2613 [模板]有理数取余 解析 简单的数论题 发现并没有对小数取余这一说,所以我们把原式化一下, \[(c=\frac{a}{b})\equiv a\times b^{-1}(mod\ p ...
- P2613 有理数取余
原题链接 https://www.luogu.org/problemnew/show/P2613 在这里虽然是讲洛谷的题解,但用到的数论知识,归并到数论里也不为过! 进入正题: 首先看到题面:给出一个 ...
- 题解——洛谷P2613 【模板】有理数取余(扩展欧几里得算法+逆元)
题面 题目描述 给出一个有理数 c=\frac{a}{b} ,求 c mod19260817 的值. 输入输出格式 输入格式: 一共两行. 第一行,一个整数 \( a \) .第二行,一个整 ...
- P2613 【模板】有理数取余
题目描述 给出一个有理数 $c=\frac{a}{b}$ ,求 c mod 19260817 的值. 输入输出格式 输入格式: 一共两行. 第一行,一个整数 aa .第二行,一个整数 bb . 输出格 ...
- 数学【p2613】 【模板】有理数取余(费马小定理)
题目描述 给出一个有理数 c=a/b ,求 c mod 19260817的值. 说明 对于所有数据, 0≤a,b≤10^10001 分析: 一看题 这么短 哇简单!况且19260817还是个素数!(美 ...
- [洛谷P2613]【模板】有理数取余
题目大意:给你$a,b(a,b\leqslant10^{10001})$,求出$\dfrac a b\equiv1\pmod{19260817}$,无解输出 Angry! 题解:在读入的时候取模,若$ ...
随机推荐
- selenium webdriver 的事件处理
package www.zr.com; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; imp ...
- MySQL与SQLServer的update left join语法区别
需求: 表A 字段 A_ID, A_NAME, B_ID 表B 字段 B_ID, B_NAME 需求把A的所有A_NAME更新为相应的B的 B_NAME. mysql做法: UPDATE A LEFT ...
- 学习神器!本机安装虚拟机,并安装Linux系统,并部署整套web系统手册(包含自动部署应用脚本,JDK,tomcat,TortoiseSVN,Mysql,maven等软件)
1. 引言 编写目的 本文档的编写目的主要是在Linux系统上部署mis_v3员工管理系统,方便测试,并为以后开发人员进行项目部署提供参考 准备工作 软件部分 软件项 版本 备注 Mysql 5. ...
- GROUP BY ROLLUP和CUBE 用法
ROLLUP和CUBE 用法 Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句. 如果是Group by ROLLUP(A, B, C)的话 ...
- sqLSERVER 计划缓存
在这一期的性能调优培训里,我想详细谈下SQL Server里计划缓存及其副作用.在上一周你已经学到,每个提交给SQL Server的逻辑查询会编译成物理执行计划.那个执行计划然后会被缓存,即被称为计划 ...
- 一次shell中seq的处理
一次shell中seq的处理 背景:用要shell 提取 文件中内容,文件名是用序列号如下生成,文件差不多有将近400多w个 如下: www.ahlinux.com 原始脚本#! /bin/sh# ...
- Spring Boot 启动失败,描述/Description: Cannot determine embedded database driver class for database type NONE
异常截图====> 快速解决方式==> 在SpringBoot的启动类上面添加注解:@EnableAutoConfiguration(exclude={DataSourceAutoConf ...
- rpmbuild spec 打包jar变小了、设置禁止压缩二进制文件Disable Binary stripping in rpmbuild
Disable Binary stripping in rpmbuild 摘自:http://livecipher.blogspot.com/2012/06/disable-binary-stripp ...
- 整合Office Web Apps至自己的开发系统
原文出处:http://www.cnblogs.com/poissonnotes/p/3267190.html 还可参考:https://www.cnblogs.com/majiang/p/36729 ...
- Linux下安装Pcntl PHP扩展
//解压源码包 [root@centos src]# tar -zxvf php-5.5.35.tar.gz //进入pcntl扩展库 [root@centos src]# cd php-5.5.35 ...