題目學習 韓信點兵

2021-08-08 17:27:04 字數 1615 閱讀 8952

時間限制:500ms  記憶體限制:65536k

相傳漢高祖劉邦問大將軍韓信統御兵士多少,韓信答說,每3人一列餘1人、5人一列餘2人、7人一列餘4人、13人一列餘6人、 17人一列餘2人、19人一列餘10人、23人一列餘1人、29人一列餘11人。

劉邦茫然而不知其數。你呢? 你是一位優秀的程式設計師,請你幫劉邦解決這一問題。 

要求由鍵盤輸入a,b,c,d,e,f,g,h,a,b,c,d,e,f,g,h十六個數,分別代表每a人一列餘a、每b人一列餘b、每c人一列餘c、每d人一列餘d、每e人一列餘e、每f人一列餘f、每g人一列餘g、每h人一列餘h,其中a,b,c,d,e,f,g,h為互不相等的質數

輸出總兵士數,要求輸出滿足條件的最小的乙個,但要滿足8種排法的每一種排法至少可排一列。(保證給的資料,有結果且計算的結果不會超過2的63次方)

2 3 5 7 11 13 17 19

1 1 1 1 1 1 1 1

9699691

暑假看了點數論,在網上看了些中國剩餘定理,回頭寫這道數學題/呲牙

//#pragma comment(linker, "/stack:1024000000,1024000000")

#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define mp make_pair

#define pb push_back

#define mst(a,b) memset((a),(b),sizeof(a))

#define test cout<<"*************************"<= (e); i-=(down))

#define rep1(s,n,up) for(int j = (s); j < (n); j+=(up))

#define per1(n,e,down) for(int j = (n); j >= (e); j-=(down))

typedef long long ll;

typedef unsigned long long ull;

typedef pairpii;

typedef vectorvi;

typedef vectorvii;

const int inf = 0x3f3f3f3f;

const ll inf = (1ull << 63) - 1;

const double pi = acos(-1.0);

const int maxn = (1 << 16) + 7;

const ull hashmod = 29050993;

const double esp=1e-6;

//#define local

int main()

rep(0,8,1)

temp_m=m;

while(m%divisor[i]!=1)

m+=temp_m;

sum+=m*remainder[i];

}sum%=tot_m;

while(sum

韓信點兵python演算法 韓信點兵演算法

秦朝末年,楚漢相爭。一次,韓信將1500名將士與楚王大將李鋒交戰。苦戰一場,楚軍不敵,敗退回營,漢軍也死傷四五百人,於是韓信整頓兵馬也返回大本營。當行至一山坡,忽有後軍來報,說有楚軍騎兵追來。只見遠方塵土飛揚,殺聲震天。漢軍本來已十分疲憊,這時隊伍大譁。韓信兵馬到坡頂,見來敵不足五百騎,便急速點兵迎...

韓信點兵演算法

孫子算經 中給出這類問題的解法 三三數之剩二,則置一百四十 五五數之剩三,置六十三 七七數之剩二,置三十 並之得二百三十三,以二百一十減之,即得。凡三三數之剩一,則置七十 五五數之剩一,則置二十一 七七數之剩一,則置十五,一百六以上,以一百五減之,即得。用現代語言說明這個解法就是 首先找出能被5與7...

Problem A 韓信點兵

劉邦問韓信 你覺得我可以帶兵多少?韓信 最多十萬。劉邦不解的問 那你呢?韓信自豪地說 越多越好,多多益善嘛!劉邦半開玩笑半認真的說 那我不是打不過你?韓信說 不,主公是駕馭將軍的人才,不是駕馭士兵的,而將士們是專門訓練士兵的.某此戰役,韓信就帶15000名士兵上戰場廝殺,不幸,戰死些許士兵,但具體數...