不定方程

不定方程求解

孤人 提交于 2020-02-09 10:30:59
【题目描述】 给定正整数a,b,ca,b,c。求不定方程 ax+by=cax+by=c 关于未知数xx和yy的所有非负整数解组数。 【输入】 一行,包含三个正整数a,b,ca,b,c,两个整数之间用单个空格隔开。每个数均不大于10001000。 【输出】 一个整数,即不定方程的非负整数解组数。 【输入样例】 2 3 18 【输出样例】 4 【参考程序】 # include <iostream> # include <cstdio> using namespace std ; int main ( ) { int a , b , c , x , y , s = 0 ; cin >> a >> b >> c ; for ( x = 0 ; x <= c / a ; ++ x ) for ( y = 0 ; y <= c / b ; ++ y ) if ( a * x + b * y == c ) s ++ ; cout << s << endl ; return 0 ; } 来源: CSDN 作者: 武侠猫 链接: https://blog.csdn.net/fjkgh/article/details/104231304

不定方程详解

橙三吉。 提交于 2020-02-08 17:42:42
二元一次不定方程 定义: a , b , c a,b,c a , b , c 是整数, a b ≠ 0 ab≠0 a b  ​ = 0 ,那么形如 a x + b y = c ax+by=c a x + b y = c 的方程称为二元一次不定方程。 定理:设 a , b a,b a , b 是整数,且 d = ( a , b ) d=(a,b) d = ( a , b ) ,如果 d ∣ c d|c d ∣ c ,那么方程存在无数多个整数解,否则方程不存在整数解。 ( ( a , b ) = g c d ( a , b ) ) ((a,b)=gcd(a,b)) ( ( a , b ) = g c d ( a , b ) ) 二元一次不定方程和 同余方程 之间可以相互转换的,例如在 a > 0 , b > 0 a>0,b>0 a > 0 , b > 0 的条件下,求解二元一次不定方程 a x + b y = c ax+by=c a x + b y = c 与求解同余方程 a x ≡ c ( m o d b ) ax≡c(mod\ b) a x ≡ c ( m o d b ) 是相同的。 求解同余方程使用 扩展欧几里得算法 ,二元一次不定方程同样可以使用扩展欧几里得算法。 由扩展欧几里得可知:设 a a a 和 b b b 不全为0,则存在整数 x , y x,y x , y ,使得

5.不定方程求解问题

落爺英雄遲暮 提交于 2020-01-28 20:55:26
1.100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马二匹驮1担。试编写程序计算大、中、小马数目 int i = 0;//大马 int j = 0;//中马 int k = 0;//小马 for(i = 0;i < 34;i ++) { for(j = 0;j < 51;j ++) { k = 100 - i - j; if(k % 2 == 0) { if(3 * i + j * 2 + k / 2 == 100) printf("大马:%d 中马:%d 小马:%d\n",i,j,k); } } } 2.用1元人民币兑换成1分,2分和5分硬币,要求应换若干2分的,还应该换若干1分的,且1分的个数是2分个数的10倍,其余的换成5分的,问每种硬币换多少个? 这道题值得思考的是应该设置2分的个数变量作为总循环变量,如果设置1分的个数变量作为总循环,要考虑个数是否是10的整数倍,写起来要多写1分个数是2分个数的取余数为0且取模为10,很麻烦 int i = 0;//1元 int j = 0;//2元 int k = 0;//5元 for(j = 0;j <= 50;j ++) { i = j * 10; for(k = 0;k <= 20;k ++) { if(i + 2 * j + 5 * k == 100) printf("1分:%d,2分:%d,5分:%d\n",i,j

拓展欧几里得算法求不定方程

心已入冬 提交于 2019-11-27 07:44:45
对于          ax+by=gcd(a,b) 这样的方程,可以用扩展欧几里得算法exgcd求出一组通解。 根据欧几里得求gcd:          gcd(a,b)=gcd(b,a%b) 可得          bx+(a%b)y=gcd(b,a%b) 根据       a%b=a−(a/b)∗b 可得          bx+ay−(a/b)b∗y=gcd(b,a%b) 化简得          ay+b(x−(a/b)y)=gcd(b,a%b)         x ′ = y , y ′ = ( x − ( a / b ) y )     a x ′ + b y ′ = g c d ( b , a % b ) < = > a x + b y = g c d ( a , b ) 根据       gcd(a,0)=a 一直递归直到b为0时可得       ax+by=a 可以得出一组平凡解            x=1,y=0 所以一直递归下去可以得出一组平凡解,然后再往回带得出ax+by=gcd(a,b)的一组解( x ′ = y , y ′ = ( x − ( a / b ) y ) ) 泛化来看不定方程 ax+by=c 只有满足 c%gcd(a,b)==0 才有解。 求解同余方程可以用费马小定理来求也可以用拓展欧几里得来求 ax≡b mod n <==>ax+ny

day3(数论)

瘦欲@ 提交于 2019-11-27 01:01:51
总 得来说,这是可怕的一天,极其可怕的一天 (完) 一、数论 阴影啊! 首先,设ab为两个整数,则存在唯一的q和r,使得a=qb+r 若r=0,则b整除a,记作b|a。 (1)同余 若a/m和b/m的余数相同,则称a于b对模m同余,记作a ≡ b (mod m) 剩余系:在模 m 的意义下,余数相同的数归为一个集合,那么所有整数被分为 m个不同的集合,模 m 的余数分别为 0,1,2,3,...,m − 1,这些集合被称为模 m 剩余类(同余类)。每个同余类中的任意两个整数都是模 m 同余的。__by dzy(就是模m的余数集合) 若是剩余系遍历了0~m-1,则叫做完全剩余系 同余式的三则运算: 设 a,b,c,d 为整数,m 为正整数,若 a ≡ b (mod m),c ≡ d(mod m),则: ax + cy ≡ bx + dy (mod m),其中 x,y 为任意整数,即同余式可以相加() ac ≡ bd (mod m),即同余式可以相乘a n ≡ b n (mod m),其中 n > 0 f(a) ≡ f(b) (mod m),其中 f(x) 为任一多项式。 a n ≡ b n (mod m),其中 n > 0 (2)素数 判断素数的方法:一般是从2开始,枚举到√ n,依次判断i是否能整除n,若n=pq,则pq中的一个必定小于等于√ n。 但是,如果硬生生跑√ n