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 ...
随机推荐
- HTML5学习笔记简明版(9):变化的元素和属性
改变的元素(Element) 下面元素在HTML5里的使用方法稍作改动以便能在web里更好的使用或者起到更大作用: 没有href属性的a元素将显示成一个占位符,并且a元素内部如今支持flow cont ...
- 【BZOJ2400】Spoj 839 Optimal Marks 最小割
[BZOJ2400]Spoj 839 Optimal Marks Description 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. ...
- Hadoop实战-MapReduce之倒排索引(八)
倒排索引 (就是key和Value对调的显示结果) 一.需求:下面是用户播放音乐记录,统计歌曲被哪些用户播放过 tom LittleApple jack YesterdayO ...
- win8.1 保护眼睛的颜色设置
reg add "HKEY_CURRENT_USER\Control Panel\Appearance\New Schemes\Current Settings SaveAll\Sizes\ ...
- Android-低功耗蓝牙(BLE)-客户端(主机/中心设备)和服务端(从机/外围设备)
一.Android 低功耗蓝牙(BLE)的API简介 从Android 4.3(API 18)才支持低功耗蓝牙(Bluetooth Low Energy, BLE)的核心功能, BLE蓝牙协议是GAT ...
- 【Selenium】跳转问题
/** * rewrite the get method, adding user defined log</BR> * 地址跳转方法,使用WebDriver原生get方法,加入失败重试的 ...
- 【概念】SVG(2)
Style <svg width="200" height="200" xmlns="http://www.w3.org/2000/svg&qu ...
- 2016.4.23浙江省赛(zoj3936 zoj3938 zoj3940 zoj3944 zoj3946 zoj3947 )
A Apples and Ideas Time Limit: 2 Seconds Memory Limit: 65536 KB "If you have an apple ...
- linux命令学习笔记 : install 命令
install .作用 install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户. .格式 ()install [选项]... 来源 目的地 ()install [选项]... 来源 ...
- 【CQ18高一暑假前挑战赛3】标程
[A:LCM] #include<bits/stdc++.h> using namespace std; #define ll long long int main() { ll a,b, ...