1. 程式人生 > >NOI庫7650 不定方程求解

NOI庫7650 不定方程求解

#include <cstdio>
#include <algorithm>
using namespace std;
int ans;
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
void exgcd(int a,int b,int &x,int &y)
{
    if(b==0) 
    {
        x=1;
        y=0;
        return;
    }
    exgcd(b,a%b,x,y);
    int t=x;
    x=y;
    y=t-(a/b)*y
; return; } int main() { int a,b,c,d,x=1,y=1,x2,y2; scanf("%d%d%d",&a,&b,&c); d=gcd(a,b); if(c%d!=0) { printf("0"); return 0; } exgcd(a,b,x,y); //printf("%d %d",x,y); x*=c/d; y*=c/d; if(x<0) while(x<0) { x+=b/d; y
-=a/d; } else if(y<0) while(y<0) { x-=b/d; y+=a/d; } x2=x;y2=y; while(x2>=0&&y2>=0) { ans++; x2+=b/d; y2-=a/d; } x-=b/d; y+=a/d; while(x>=0&&y>=0) { ans++; x-=b/d; y
+=a/d; } printf("%d",ans); return 0; }

相關推薦

NOI7650 不定方程求解

#include <cstdio> #include <algorithm> using namespace std; int ans; int gcd(int a,in

7650:不定方程求解

描述給定正整數a,b,c。求不定方程 ax+by=c 關於未知數x和y的所有非負整數解組數。輸入一行,包含三個正整數a,b,c,兩個整數之間用單個空格隔開。每個數均不大於1000。#include &l

基礎練習:1101:不定方程求解

1101:不定方程求解 【題目描述】 給定正整數a,b,c。求不定方程 ax+by=c 關於未知數x和y的所有非負整數解組數。 【輸入】 一行,包含三個正整數a,b,c,兩個整數之間用單個空格隔開。每個數均不大於1000。 【輸出】 一個整數,即不定方程的非負整數解組數。 【輸入樣例】 2

青蛙的約會(擴充套件歐幾里得演算法+不定方程求解

1.折磨了我好久,不過大概是懂了。 2.題目: 兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面

擴展gcd求解二元不定方程及其證明

std iostream 不定 article include %d content 及其 變形 #include <cstdio> #include <iostream> using namespace std; /*擴展gcd證明 由於當

【Openjudge:Noi】7891:一元三次方程求解 c++

【Openjudge:Noi】7891:一元三次方程求解 總時間限制:  1000ms 記憶體限制:  65536kB 描述 有形如:ax3+bx2+cx+d=0  這樣的一個一元三次方程。 給出該方程中各項的係數(a,b,c,d  均為實數),並約定該方程

(數論)整數二元一次不定方程(擴充套件歐幾里得求解

問題:形如a*x+b*y=c(a,b均不為0)的方程,a,b,c都是整數,求(x,y)整數解。 判斷是否有解 整數二元一次方程有解的充要條件是gcd(a,b)|c。如果不能整除則無解。 擴充套件歐幾里得演算法 歐幾里得演算法就是求出a*x+b*y=g

歐幾里得及擴充套件歐幾里得(應用:求解不定方程、解模線性方程、求模的逆元)

歐幾里得 1.含義:歐幾里德演算法又稱輾轉相除法,用於計算兩個整數a,b的最大公約數。 原理公式:gcd(a,b)=gcd(b,a mod b) 因此(a,b)和(b,a mod b)的公約數是一樣的,其最大公約數也必然相等. 2.實現: int gcd(int a

不定方程求解

步驟如下:   求a * x + b * y = n的整數解。   1、先計算Gcd(a,b),若n不能被Gcd(a,b)整除,則方程無整數解;否則,在方程兩邊同時除以Gcd(a,b),得到新的不定方程a’ * x + b’ * y = n’,此時Gcd(a

擴展歐幾裏得與二元不定方程

歐幾裏得 註意 自己 需要 pan ret 括號 AC 得到 二元不定方程,就是形同ax+by=c的二元方程, 只不過有無數組解罷了。 還有原諒我蒟蒻,不會用字母的寫法,只好直覺+小學數學寫法了 我們可以使用輾轉相除法來解決(過渡好生硬啊) 我們首先來看一組例子 為了方便理

洛谷 [P1024]一元三次方程求解【二分答案】

https 格式 -m 要求 ble 方程 print else 如果 題目鏈接:https://www.luogu.org/problemnew/show/P1024 題目描述 有形如:ax3+bx2+cx+d=0 這樣的一個一元三次方程。給出該方程中各項的系數(a,

luogu1024 一元三次方程求解

iostream ble tar names 註意 stream 左右 ret == 題目大意 已知一元三次方程\(ax^3+bx^2+cx+d=0\): 有且只有3個根 對\(\forall x, x\in[-100,100]\) 對\(\forall x_1,x_2,

洛谷 P1024 一元三次方程求解

cstring stream () pro fin targe target bsp reg       洛谷 P1024 一元三次方程求解 題目描述 有形如: ax3 + bx2 + cx1 + dx0 = 0 這樣的一個一元三次方程。給出該方程中各項的系數( a,b,c

不定方程想到的——數論選講

正整數 () clu 遇到的問題 推出 假設 class 存在 數論 所謂二元一次不定方程,指的是關於$x,y$的,形如$ax+by=c$的方程在這裏我們約定$a,b,c$均為整數。那麽我們遇到的問題是:如何判斷這個方程有解呢?裴蜀定理:設$a,b,d$均為整數,且$(a,

SDUST - Training F HDU2199 方程求解,二分查詢,精度控制

Description Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100; Now please try your lucky.

[P1034][NOIP2001]一元三次方程求解 (二分)

二分 #include<bits/stdc++.h> using namespace std; double a,b,c,d; double fc(double x) { return a*pow(x,3)+b*pow(x,2)+c*x+d; } int main()

北大OpenJudge 4140:方程求解

4140:方程求解 總時間限制:  1000ms 記憶體限制:  65536kB 描述 求下面方程的根:f(x) = x3- 5x2+ 10x - 80 = 0。 輸入 - 輸出 精確到小數點後9位。 樣例輸入 - 樣例輸出

不定方程(從HDU1356說起)

傳送門:http://acm.hdu.edu.cn/showproblem.php?pid=1356 由題意,就是要解一個不定方程ax+by=d,要求(abs(x)+abs(y))最小。 一.exgcd 先從exgcd說起。由裴蜀定理可知,ax+by=gcd(a,b)必定存在整數

深入淺出學演算法006-求不定方程的所有解

4005: 深入淺出學演算法006-求不定方程的所有解 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 5139 Solved: 2159 Description 現有一方程ax+by=c,其中係數a、b、c均為整數,求符合條件的所有正整數解,要求

題解 luogu P1024 【一元三次方程求解

這道題的二分原理題目已給出:f(x)*f(x+1)<0時,x至x+1中必有一根。那麼,我們只需要迴圈-100至100,再用分治考慮小數部分就可以了。下面附上程式碼: #include<bits/stdc++.h> using namespace std; double