【藍橋杯學習記錄】【6】不定方程的解法

一次不定方程 

4 * x - 5 * y = 7;

ax + by = c;         a = 4 , b = -5 , c = 7; 
ax = c - by;
 
1 .先求一個特殊解    x0  y0 
(先不管 x,(c - by)一定能被 a 整除 , 所以先求一個特殊解)
        2 . 求通解 :
#include <iostream>
#include <cstdio>
#include <string.h>
#include <iomanip>
#include <math.h>
#include <stdlib.h>
#include <algorithm>

#define PI atan(1.0)*4

using namespace std;

int main()
{	
	//一次不定方程 
	
	/*
	4 * x - 5 * y = 7;
	for(int x = 0; x < 100; x++)
	for(int y = 0; y < 100; y++)
	{
		if(4 * x - 5 * y == 7)
			cout << "x: " << x << " y: " << y << endl;
	}
	*/
	
	// ax + by = c;        // a = 4 , b = -5 , c = 7; 
	// ax = c - by;
	 
	// 1 .先求一個特殊解    x0  y0 
		//(先不管 x,(c - by)一定能被 a 整除 , 所以先求一個特殊解)
	// 2 . 求通解 :		x = x0 + b*t 	y = y0 - at; 
	int a = 4 , b = -5 , c = 7;
	for(int y = 0; y < 100; y++)
	{
		if( (c - b*y) % a == 0)
		{
			cout << "x : " << (c - b*y) / a << ",  y : " << y << endl;
			break;
		}
			
	}
	
	
	//買不到的數目
	// ax + by = c;  x, y爲整數  a, b互質
	
	
	/** 21位花朵數 水仙花數 **/
	
	// n = 3時, 153就滿足條件,  1^3 + 5^3 + 3^3 = 153
	// n = 4時, 1634就滿足條件,  1^4 + 6^4 + 3^4 + 4^4= 1634
	// n = 5時, 92737就滿足條件
	
	//求 N = 21 時, 所有可能的數字(從小到大)
	
	//暴力 ——搜索次序 0 ~ 9 
	//左邊所有數的和 與他們的出現次序沒有關係 只與每個數出現的次數有關係
	
	//用一個數組記錄每一個數字出現幾次 
	//遞歸的方法確定一個數出現多少次 並球21次方 的和
	//結束分配則進行比較
	//看看所求的和中每個數字出現的次數和之前分配的次數是否一樣
	
	//注意 : java可以使用BigInt  c語言則更麻煩 因爲long long int最多19位 只能類似於字符串加減
	
	
	
	/** 六角幻方 **/ 
	/*
		*	*	*
	  *   *   *   *
	 *  *   *   *   *
	  *   *   *   *
	   *	*	*
	1 ~ 19 19個整數排列
	要求每條直線上的數字的和 全都相等 
	
	//線性方程 高斯消元法  消的左邊矩陣只剩下對角線上的元素 其他全爲0
	
	//在加的過程中 每個數都被加了3次    所以可以求出15行 每一行的和是多少 
	//cout << 19*20/2*3/15;
	//即 19*20/2*3/15 = 38 ;
	
	//先初始化(行、列)   再高斯消元  顯示消元結構 最後查找輸出 
	*/ 
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	//00:42:09 
	
	return 0;
}




x = x0 + b*t y = y0 - at; 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章