日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言数字的拆解_C语言解决变态推理题

發(fā)布時(shí)間:2025/4/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言数字的拆解_C语言解决变态推理题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有兩個(gè)數(shù),a和b。a大于等于b,而且二者都是2到99之間的正整數(shù)。

現(xiàn)在我當(dāng)著P和Q的面,分別悄悄告訴了P先生a和b的和,告訴了Q先生a和b的積。

接下來(lái)有這么一段對(duì)話:

Q:我不知道a和b分別是啥。

P:我知道你不知道,我也不知道。

Q:那我現(xiàn)在知道了。

P:那我現(xiàn)在也知道了。

請(qǐng)問(wèn)a和b分別是什么?


這幾天偶然看到這題,我不禁想到我高中時(shí)被這個(gè)問(wèn)題支配一個(gè)晚上的恐懼,現(xiàn)在有了計(jì)算機(jī),我們?cè)囋囉糜?jì)算機(jī)解決該問(wèn)題。

現(xiàn)在我們首先要從這簡(jiǎn)單的對(duì)話得到一些消息。第一句話,Q說(shuō)不知道a,b是什么,說(shuō)明了a和b不都為質(zhì)數(shù),若都為質(zhì)數(shù)則ab有唯一的分解。第二句話,說(shuō)明P知道a+b不能表示為兩個(gè)質(zhì)數(shù)相加得到,不然如果能表示,那么P就不能肯定Q不知道a和b。第三句話,Q得到第二句話的消息后,對(duì)ab所有的乘的分解進(jìn)行了相加,最后只有一組符合相加的和不能表示為兩個(gè)質(zhì)數(shù)相加。第四句話,P得到Q的消息,把a(bǔ)+b進(jìn)行了和的拆解,得到多組數(shù)字,再對(duì)每一組數(shù)字相乘,相乘得到的數(shù)在進(jìn)行積的拆解,得到多組數(shù)字,在對(duì)每一組數(shù)字相加,看是否能表示為兩個(gè)質(zhì)數(shù)相加,如果能表示,不符合。僅有一組中的一組滿足不能表示為兩個(gè)質(zhì)數(shù)相加。(是不是很繞,我也覺(jué)得。。。)

簡(jiǎn)單點(diǎn)來(lái)說(shuō),就是

  • a,b不都為質(zhì)數(shù)
  • a+b不能表示為一組質(zhì)數(shù)相加
  • ab的積解的和不能表示為兩個(gè)質(zhì)數(shù)相加(僅有一組)
  • a+b和解的積的積解的和不能表示為兩個(gè)質(zhì)數(shù)相加(僅有一組)
和解:a+b拆為a+b,c+d,e+f......積解:ab拆為ab,cd,ef......

C語(yǔ)言解決

既然跟質(zhì)數(shù)有關(guān),就要寫(xiě)一個(gè)判斷這個(gè)數(shù)是否為質(zhì)數(shù)的函數(shù)

int prime(int i) {int x = 0;for (int j = 2; j < i; j++) {if (i % j == 0) return 0;}return 1; }

接著開(kāi)始寫(xiě)第二段對(duì)話的函數(shù),這個(gè)函數(shù)判斷和能否表示兩個(gè)質(zhì)數(shù)之和

int primecount(int i, int j) {int x = i + j; for (int k = 2; k < x; k++) {int y = x - k;if (prime(k) == 1 && prime(y) == 1) {return 0;}}return 1; }

第三句話,傳入i,j,先進(jìn)行積的拆解,在調(diào)用第二段話的函數(shù),判斷和是否表示為兩個(gè)質(zhì)數(shù)相加,注意k和y小于SIZE(100)

int Multiplicationcount(int i, int j) {int n = 0;int K = 0, Y = 0;for (int k = 2; k < i * j; k++) {if ((i * j) % k == 0) {int y = i * j / k;if (primecount(k, y)){if (k < SIZE && y < SIZE && k != y) {n++;}}}}return n; }

第四句話,分解和在調(diào)用第三段話的函數(shù),末尾的判斷看似多此一舉,但是不用的話會(huì)出現(xiàn)bug,原因我也不知道

int Additioncount(int i, int j) {int m = 0;int x = i + j;int n = 0;int K = 0, Y = 0;for (int k = 2; k < x-1; k++) {int y = x - k; if (Multiplicationcount(k, y) == 2){if (k < SIZE && y < SIZE && k != y) {K = k;Y = y;n++;}else m++;}}if (m > 0 && n == 2) {n = 0;}else if (m == 0 && n == 2) {if (K == i || Y == i) n == 2;else n == 0;}return n; }

主函數(shù),注意==2,是因?yàn)楸闅v會(huì)出現(xiàn)重復(fù)的。

void main(){ int x = 0;for (int i = 2; i < SIZE; i++) {for (int j = 2; j < i; j++) {if (prime(i) == 1 && prime(j) == 1) continue;else {if(primecount(i,j)){if(Multiplicationcount(i, j) == 2 && Additioncount(i,j)==2){printf("%d %dn", i, j);}}}}printf("%dn",i);} }

運(yùn)行結(jié)果為13和4,運(yùn)行時(shí)間會(huì)比較長(zhǎng)

結(jié)束

總結(jié)

以上是生活随笔為你收集整理的c语言数字的拆解_C语言解决变态推理题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。