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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu 4556 Stern-Brocot Tree

發布時間:2025/3/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 4556 Stern-Brocot Tree 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Stern-Brocot Tree

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Time Limit: 3000/1000 MS (Java/Others)????Memory Limit: 65535/32768 K (Java/Others)

Problem Description
  
  上圖是一棵Stern-Brocot樹,其生成規則如下:
  從第1行到第n行,每行相鄰兩數a/b和c/d,產生中間數(a+c)/(b+d),置于下一行中。將一行的分數(包括0/1,1/0),進行約分簡化,則每一行(包括0/1,1/0,1/1),不會出現兩個相同的分數。若分子或者分母大于n,則去掉該分數,將剩下的分數,從小到大排序,得到數列F。
  現在請您編程計算第n行的數列F的個數。

Input 輸入包含多組測試用例,每組輸入數據是一個正整數n(n<=1000000)。
Output 對于每組的測試數據n,請輸出第n行的數列F的個數。
Sample Input 1 2 4 6
Sample Output 3 5 13 25 仔細看圖可以發現:對于每一行都可以看成是關于1/1對稱的兩部分,所以只需求出1/1左邊的個數就可求出這一行的個數。而左邊全部都是真分數,分母為x的真分數的個數就是x的歐拉函數值。n最大為1000000,所以可以遞推打表。 #include<cstdio> const int N = 1000001; int e[N]; __int64 a[N], res = 0; void euler() {for(int i = 2; i < N; i++)e[i] = 0;e[1] = 1;for(int i = 2; i < N; i++)if(!e[i]){for(int j = i; j < N; j += i){if(!e[j])e[j] = j;e[j] = e[j] / i * (i-1);}} } int main() {int i, n;euler();for(i = 1; i < N; i++){res += e[i];a[i] = res * 2 + 1;}while(~scanf("%d", &n))printf("%I64d\n", a[n]);return 0; }

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的hdu 4556 Stern-Brocot Tree的全部內容,希望文章能夠幫你解決所遇到的問題。

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