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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

有理数分解-数论

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有理数分解-数论 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述 Description

  任何一個[0,1]中的有理數p/q(p、q均為自然數)一定可以分解成1/r1+1/r2+1/r3+…+1/rk,且r1<r2<r3<…<rk。當然這樣的分解不是唯一的,如5/6=1/2+1/3=1/2+1/5+1/8+1/120,第一個分解式中的第二項比第二個分解式中的第二項大,因此我們可以定義第一個分解式比第二個分解式大。

  程序要求找出p/q的最大分解式。

?輸入輸出格式 Input/output 輸入格式:
鍵盤輸入p、q,1≤p≤q≤50
輸出格式:
從小到大依次輸出分解式中的每個分母,一行輸出一個數 ?輸入輸出樣例 Sample input/output 樣例測試點#1

輸入樣例:

5 6
輸出樣例:

2 3

思路:

假設1/r是能從p/q中分解出來的最大分子為1的真分數,則1/r≤p/q<1/(r-1)①

又因為p/q-1/r=(p×r-q)/(q×r)②

根據①可知,p×(r-1)<q,所以p×r-p<q,代入②中可看出,每次待分解的分數的分子一定單調下降,所以就可以用單精度除法(高精度除以普通整數)解決本題。

注意:在輸入p、q后要對分數進行化簡。

?

代碼如下:

1 #include <stdio.h> 2 int gcd(int a,int b)//求最大公約數 3 { 4 int r=a%b; 5 while(r>0) 6 { 7 a=b; 8 b=r; 9 r=a%b; 10 } 11 return b; 12 } 13 int main() 14 { 15 int p,q; 16 int cm;//當前最大公約數 17 int r; 18 scanf("%d%d",&p,&q); 19 while(p>0) 20 { 21 cm=gcd(p,q); 22 if(cm>0) 23 { 24 /*===========*///化簡分數 25 p=p/cm; 26 q=q/cm; 27 /*===========*/ 28 } 29 if((q%p)>0)//如果不能分解為最終的1/rk 30 { 31 r=q/p+1; 32 } 33 else 34 { 35 r=q/p; 36 } 37 printf("%d\n",r); 38 p=p*r-q;//減掉 39 q=q*r; 40 } 41 return 0; 42 }

?

轉載于:https://www.cnblogs.com/geek-007/p/6287397.html

總結

以上是生活随笔為你收集整理的有理数分解-数论的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。