当前位置: 首页 > wzjs >正文

阿里巴巴网站开发信在哪网店运营策划方案

阿里巴巴网站开发信在哪,网店运营策划方案,动态域名解析,logo在线设计制作1.简介 exgcd的目的是表示出二元一次不定方程的通解。 形式化地,exgcd算法就是输入a,b,c的值,返回一组x,y,满足 a x b y c axbyc axbyc。 2.1方程无整数解的情况 当 c 不能被 a ,b最小公倍…

1.简介

exgcd的目的是表示出二元一次不定方程的通解。
形式化地,exgcd算法就是输入a,b,c的值,返回一组x,y,满足 a x + b y = c ax+by=c ax+by=c

2.1方程无整数解的情况

  1. 当 c 不能被 a ,b最小公倍数的整除时候,方程无整数解。反之,有整数解。(此条性质又名裴蜀定理)。

2.2把求解 a x + b y = c ax+by=c ax+by=c转化为求解 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)

  1. a x + b y = c ax + by = c ax+by=c ,则 2 a x + 2 b y = 2 c , n a x + n b y = n c 2ax + 2by = 2c,nax+nby = nc 2ax+2by=2cnax+nby=nc
  2. a x + b y = c ax + by = c ax+by=c 对应的解 是 a x + b y = g c d ( a , b ) ax+by = gcd(a,b) ax+by=gcd(a,b)的解的整数倍,更具体一些是 c / g c d ( a , b ) c / gcd(a,b) c/gcd(a,b)

所以,只需要找到 a x + b y = g c d ( a , b ) ax+by = gcd(a,b) ax+by=gcd(a,b) 的解,将其乘以 c / g c d ( a , b ) c / gcd(a,b) c/gcd(a,b),就找到了

2.3 求解方程 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)

先人给出了几个神秘的黑色箱子,丢入a,b,c,就吐出满足 a x + b y = c ax+by=c ax+by=c的一组x,y。

2.3.1 黑箱a(用lamdba语法)

int x,y;
auto exgcd = [&](auto &&self,int a,int b) -> void
{if(b == 0){x = 1;y = 0;return;}self(self,b,a%b);int t = x;x = y;y = t - a/b*y;
};  
exgcd(exgcd,a,b);//运行完此行,x,y就已经存的是合法值了

2.3.1 黑箱b(没有lambda)

// 不想&x,&y可以开全局变量
int Exgcd(int a, int b, int &x, int &y) {if (!b) {x = 1;y = 0;return a;}int d = Exgcd(b, a % b, x, y);int t = x;x = y;y = t - (a / b) * y;return d;//返回值d是顺带求出的gcd(a,b)
}

写个4~5道就背住了。
有兴趣看看证明
做完题目就会发现,题目不涉及证明,不涉及黑箱种类,但本文中的通过代码只给了黑箱a的

2.4 题目仅需任意一组合法解(特解)

x *= c/__gcd(a,b),y *= c / __gcd(a,b) //把倍数乘回去,现在就是真·特解了

任意一组,直接输出exgcd算法求出来的这组即可。

2.5题目需要满足 x > m x>m x>m的最小解(通解)

为了大于x的最小解,我们需要先求出特解,再增大(减小)x,减小(增大)y,使得等式仍然成立,且x恰好大于m。
观察得到如下性质:
x 1 , y 1 x_1,y_1 x1,y1是exgcd算法返回的解

  • a ( x 1 + t x ) + b ( y 1 + t y ) = c a(x_1+t_x) + b(y_1+t_y) = c a(x1+tx)+b(y1+ty)=c,则 t x a = − t y b t_xa = -t_yb txa=tyb

所以,当 x 2 = x 1 + k b g c d ( a , b ) , y 2 = y 1 − k a g c d ( a , b ) , x_2 = x_1 + k\frac{b} {gcd(a,b)} ,y_2 = y_1 - k\frac{a} {gcd(a,b)}, x2=x1+kgcd(a,b)by2=y1kgcd(a,b)a, k为整数,时,仍然有 a x + b y = c ax+by=c ax+by=c
可以回带验证。
那么,找出 x 1 x_1 x1加减多少个 b g c d ( a , b ) \frac{b} {gcd(a,b)} gcd(a,b)b恰好大于m,也就找到了 x > m x>m x>m的最小解
其实这个过程是在求通解。

int d = __gcd(a,b),tx = b/d,ty = a/d;
int k;
if(tx > 0) k = ceil((m-x)/tx);
else k = floor((m-x)/tx);
x += tx*k;
y -= ty*k;

3.模板题

题目提交链接

P5656 【模板】二元一次不定方程 (exgcd)

题目描述

给定不定方程

a x + b y = c ax+by=c ax+by=c

若该方程无整数解,输出 − 1 -1 1
若该方程有整数解,且有正整数解,则输出其正整数解的数量,所有正整数解中 x x x 的最小值,所有正整数解中 y y y 的最小值,所有正整数解中 x x x 的最大值,以及所有正整数解中 y y y 的最大值。
若方程有整数解,但没有正整数解,你需要输出所有整数解 x x x 的最小正整数值, y y y 的最小正整数值。

正整数解即为 x , y x, y x,y 均为正整数的解, 0 \boldsymbol{0} 0 不是正整数
整数解即为 x , y x,y x,y 均为整数的解。
x x x 的最小正整数值即所有 x x x 为正整数的整数解中 x x x 的最小值, y y y 同理。

输入格式

第一行一个正整数 T T T,代表数据组数。

接下来 T T T 行,每行三个由空格隔开的正整数 a , b , c a, b, c a,b,c

输出格式

T T T 行。

若该行对应的询问无整数解,一个数字 − 1 -1 1
若该行对应的询问有整数解但无正整数解,包含 2 2 2 个由空格隔开的数字,依次代表整数解中, x x x 的最小正整数值, y y y 的最小正整数值。
否则包含 5 5 5 个由空格隔开的数字,依次代表正整数解的数量,正整数解中, x x x 的最小值, y y y 的最小值, x x x 的最大值, y y y 的最大值。

输入输出样例 #1

输入 #1
7
2 11 100
3 18 6
192 608 17
19 2 60817
11 45 14
19 19 810
98 76 5432
输出 #1
4 6 2 39 8
2 1
-1
1600 1 18 3199 30399
34 3
-1
2 12 7 50 56

说明/提示

【数据范围】

对于 100 % 100\% 100% 的数据, 1 ≤ T ≤ 2 × 10 5 1 \le T \le 2 \times {10}^5 1T2×105 1 ≤ a , b , c ≤ 10 9 1 \le a, b, c \le {10}^9 1a,b,c109
【本博客额外提示】

  1. 注意爆 int 的问题,使用long long 类型

思路:

  1. 正整数解中x的最小值,就是 x > 0 的最小值
  2. x 最大时 y最小,x最小时y最大

通过代码

#include<bits/stdc++.h>
#define int long long
using namespace std;void solve()
{int x,y;int a,b,c;cin >> a >> b >> c;int d = __gcd(a,b);if(c % d != 0){cout << -1 << '\n';return;}auto exgcd = [&](auto &&self,int a,int b){if(b == 0){x = 1;y = 0;return;}self(self,b,a%b);int t = x;x = y;y = t - a/b*y;};exgcd(exgcd,a,b);x = x * c / d,y = y * c / d;int tx = b/d,ty = a/d;int k = ceil((1.0-x)/tx);x += tx*k;y -= ty*k;if(y <= 0){int ymin=y+ty*ceil((1.0-y)/ty);cout << x << ' ' << ymin << '\n';}else{cout << (y-1)/ty + 1 <<' ' << x << ' ' << (y - 1) % ty + 1 << ' ' << x + (y-1)/ty *tx << ' ' << y << '\n';}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t;cin >> t;while(t --) solve();return 0;
}

4.练习

[2022CCPC哈尔滨E]
[2022ICPC杭州A]
[2023湖北I]
[CF927G]
[2023ICPC网络赛(1) K]

http://www.dtcms.com/wzjs/478163.html

相关文章:

  • 郑州网络营销推广公司悟空建站seo服务
  • 妈妈我想你高清免费视频播放seo关键词排名工具
  • 门户网站推广怎么做北京做的好的seo公司
  • 装修设计软件哪个好用优化搜索点击次数的方法
  • 做网站首页的图片素材爱站关键词挖掘old
  • 外贸网站建设注意事项和建议sem推广
  • 中国做网站推广哪家好软文案例大全300字
  • 做电影网站用什么软件叫什么名字吗wordpress建站
  • 山东seo网站舆情分析网站
  • 网站平台开发报价单南京seo排名
  • .tv做网站怎么样公众号排名优化
  • 网站用oracle做数据库seo网站排名软件
  • wordpress options framework百中搜优化
  • 网站制作维护网络营销和网络销售的关系
  • 新疆做网站的公司有哪些链交换反应
  • 个性网站首页一键生成原创文案
  • 哪个网站专门做灵异文aso优化重要吗
  • 怎么在公众号上做网站百度竞价电话
  • 滨海新区建设和交通局网站alexa全球网站排名分析
  • 西宁网站建设排名最近几天新闻大事
  • 在北京做家教的网站广州网络营销产品代理
  • 厚街仿做网站站内推广
  • 建设银行网站查询余额公司网站怎么弄
  • 有哪些好的做网站uc搜索引擎入口
  • 网站建设网上学如何做网站赚钱
  • 今日新闻摘抄软件网站关键词优化
  • wordpress主题 心理医生百度seo效果怎么样
  • 广州网站设计首选柚米2022年新闻摘抄简短
  • 手机快速建站计算机培训机构哪个最好
  • 品牌运动鞋排行榜前十名安卓优化大师官方版