分數除法 Uva 10976

2021-10-03 00:06:40 字數 847 閱讀 4292

題目描述

輸入正整數k,找到所有的正整數x>=y,使得1/k = 1/x + 1/y;

樣例輸入212

樣例輸出

21/2 = 1/6 + 1/3

1/2 = 1/4 + 1/4

81/8 =1/156 + 1/13

1/8 =1/84 + 1/14

1/8 =1/60 + 1/15

1/8 =1/48 + 1/16

1/8 =1/36 + 1/18

1/8 =1/30 + 1/20

1/8 =1/28 + 1/21

1/8 =1/24 + 1/24

題記暴力列舉法,但在列舉前可以進行簡單的演算,看能否確定乙個大致的列舉範圍以減少列舉量。x>=y => 1/x<=1/y ,1/x=1/k-1/y代入化簡得到y<=2k,因此只需在k+1~2k之間列舉y就行了;如果要驗證乙個x是否是乙個方程的解,x用int表示,求出來之後再代回原來的方程,成立則是解,反之不是(該方程的解是整數).

**如下

#include

#include

const

int maxn=

10000+10

;using

namespace std;

intmain()

}printf

("%d\n"

,cnt)

;for

(int i=

0;i)printf

("1/%d = 1/%d + 1/%d\n"

,k,numx[i]

,numy[i]);

}return0;

}

UVA 10976 分數拆分

題目描述 既然要求找出所有的x y,列舉物件自然就是x y了。可問題在於,列舉的範圍如何?從1 12 1 156 1 13可以看出,x可以比y大很多。難道要無休止地列舉下去?當然不是。由於x y,有 因此 即y 2k。這樣,只需要在2k範圍之內列舉y,然後根據y嘗試計算出x即可。在這需要用到乙個判斷...

UVA 10976 暴力列舉

給定正整數k 1 k 10000 找出所有正整數 x y,使得1 k 1 x 1 y.首先,x,y肯定為整數,所以x,y的取值範圍不能小於k,即左區間為k 1,因為x y,1 x 1 y,即1 k 1 y 1 y,所以,1 k 2 y,所以2k y,所以y的取值範圍就出來了,k 1,2 k incl...

UVA10976摸魚的暴力列舉初步

我一開始的想法超時了.其實想法也還好,裡面有兩個需要優化的地方.1 通常做法是y 2 k 然後從k開始列舉的.其實想一下也是,從二倍然後加加加 2 我 的順序反了 完全不需要stack啊.開兩個陣列存一下就好了,因為你免不了要輸出sum,所以這個儲存繞不開的 哪怕是y倒著開始.或者 是什麼的.3 暴...