HDU - 1098 - Ignatius's puzzle - ax+by=c
http://acm.hdu.edu.cn/showproblem.php?pid=1098
其实一开始猜测只要验证x=1的时候就行了,但是不知道怎么证明。
题解表示用数学归纳法,假设f(x)成立,证明f(x+1)成立需要什么条件。
代入之后发现有很多二项式系数,导致他们都是65的倍数,剩下的恰好就是 f(x) 和 18+ka 。
那么只需要找到最小的a使得 18+ka是65的倍数。
题解说,毕竟65毕竟小,可以枚举a。因为a+65与a的对65的余数是一样的,所以只要枚举0到64就可以了。
我的想法是用扩展欧几里得求这个的解。
首先由裴蜀定理 ax+by=c 有解,当且仅当gcd(a,b)|c
那么 18+ka=65t 即 -ka+65t=18 求a的最小非负整数解。套方程的模板。
忘记写解方程的返回值导致返回一个任意值,有毒。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//扩展欧几里得算法:返回 g=gcd(a,b) ,以及对应的等式 ax+by=g 的解
ll exgcd(ll a,ll b,ll &x,ll &y) {
if(!a&&!b)
return -1;
if(!b) {
x=1,y=0;
return a;
}
ll d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
bool Liner_qu(ll a, ll b, ll c, ll &x, ll &y) {
if(a==0) {
if(b==0) {
if(c==0) {
x=0;
y=0;
return true;
} else {
return false;
}
}
if(c%b==0) {
x=0;
y=c/b;
return true;
//0x+by=c
} else
return false;
}
if(b==0) {
if(c%a==0) {
x=c/a;
y=0;
return true;
//ax+0y=c
} else {
return false;
}
}
ll g=__gcd(a,b);
if(c%g){
return false;
}
//裴蜀定理
ll k=c/g;
exgcd(a,b,x,y);
//ax+by=g的解
x *= k; // 任意一解
y *= k;
ll tx = x;
x %= b; //最小解
if(x<0)
x += abs(b); //最小非负整数解
k=(tx-x)/b;
y += k*a; //对应的y的解
return true;
}
ll F(int k) {
int a;
{
if(k%5==0||k%13==0)
return -1;
else {
a=1;
while((k*a+18)%65!=0) {
a++;
}
return a;
}
}
}
ll G(int k) {
ll a,b,c,x,y;
a=-k;
b=65;
c=18;
bool flag=Liner_qu(a,b,c,x,y);
if(flag) {
return x;
} else {
return -1;
}
}
int main() {
int k;
while(cin>>k) {
ll a,b,c,x,y;
a=-k;
b=65;
c=18;
bool flag=Liner_qu(a,b,c,x,y);
if(flag){
cout<<x<<endl;
}
else{
cout<<"no"<<endl;
}
}
/*for(int k=1; k<=10000; k++) {
ll s1=F(k);
ll s2=G(k);
if(s1!=s2) {
cout<<"k="<<k<<endl;
cout<<s1<<endl<<s2<<endl;
}
}*/
}
HDU - 1098 - Ignatius's puzzle - ax+by=c的更多相关文章
- HDU 1098 Ignatius's puzzle
http://acm.hdu.edu.cn/showproblem.php?pid=1098 题意 :输入一个K,让你找一个a,使得f(x)=5*x^13+13*x^5+k*a*x这个f(x)%65等 ...
- 数学--数论--HDU 1098 Ignatius's puzzle (费马小定理+打表)
Ignatius's puzzle Problem Description Ignatius is poor at math,he falls across a puzzle problem,so h ...
- HDU 1098 Ignatius's puzzle(数学归纳)
以下引用自http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=8466&messageid=2&deep=1 题意以 ...
- 题解报告:hdu 1098 Ignatius's puzzle
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098 题目中文是这样的: 伊格内修斯在数学上很差,他遇到了一个难题,所以他别无选择,只能上诉埃迪. 这 ...
- HDU 1098 Ignatius's puzzle 费马小定理+扩展欧几里德算法
题目大意: 给定k,找到一个满足的a使任意的x都满足 f(x)=5*x^13+13*x^5+k*a*x 被65整除 推证: f(x) = (5*x^12 + 13 * x^4 + ak) * x 因为 ...
- HDOJ 1098 Ignatius's puzzle
Problem Description Ignatius is poor at math,he falls across a puzzle problem,so he has no choice bu ...
- hdu 1098 Ignatius's puzz
有关数论方面的题要仔细阅读,分析公式. Problem Description Ignatius is poor at math,he falls across a puzzle problem,so ...
- 【HDOJ】1098 Ignatius's puzzle
数学归纳法,得证只需求得使18+ka被64整除的a.且a不超过65. #include <stdio.h> int main() { int i, j, k; while (scanf(& ...
- 数学: HDU1098 Ignatius's puzzle
Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
随机推荐
- byte数组和文件的相互转换
/** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File fi ...
- Struts2 原理(转载)
图来源于Struts2官方站点,是Struts 2 的整体结构. Struts2框架由3个部分组成:核心控制器FilterDispatcher.业务控制器和用户实现的业务逻辑组件.在这3个部分里,St ...
- crazyflie2.0 RCC时钟知识
因为眼下手里仅仅有16MHZ的2520封装的贴片晶振,8MHZ这样的封装做不到这么小,所以就先用16MHZ,这样我们就须要改动程序相关的RCC时钟: 1,stm32f4xx.h #define HSE ...
- 同一世界服务器架构--Erlang游戏服务器
Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中.之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现.底层的框架需要写很多代码实现,这样既浪费时间 ...
- springboot中tomcat找不到jsp页面【转载】
这个原理还没搞明白,只知道是内嵌的tomcat找jsp时默认不读取resources目录,但是具体的默认读取的是哪个目录,打了一下午断点我也没找到.... 修改方式,添加配置修改tomcat的读取目录 ...
- Net Core环境开发与调试
NET Core 包括.NET Core Runtime 和 .NET Core SDK: .NET Core = 应用运行依赖的 .NET Core Runtime .NET Core SDK = ...
- AbstractFactory Pattern
AbstractFactory模式用来解决这类问题:要创建一组相关或者相互依赖的对象. AbstractFactory Pattern结构图 实现: #ifndef _PRODUCT_H_ #defi ...
- spring4.2更好的应用事件
1.基于注解驱动事件监听器:现在可以在一个Bean的方法上使用@EventListener注解来自动注册一个ApplicationListener来匹配方法签名. @Component public ...
- linux 网络设备,网卡配置 ,相关
网络设备,网卡配置: Eth0是物理网卡:唯一mac地址,Bcast:广播地址,MAsk:子网掩码, Lo:系统自带的回环的ip地址,可以做一些基本的测试应用,比如没有网卡就用127.0.0.1, r ...
- 内核Alsa之pcm
pcm用来描述alsa中数字音频流.Alsa音频的播放/录制就是通过pcm来实现 的. 名词解释 声音是连续模拟量,计算机将它离散化之后用数字表示,就有了以下几个名词术语. Frame. 帧是音频流中 ...