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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

问题 C: 完美的数(思维)

發布時間:2024/9/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 问题 C: 完美的数(思维) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題 C: 完美的數
時間限制: 1 Sec 內存限制: 128 MB

[提交][狀態][討論版]
題目描述
一個數是否完美是這樣定義的,如果這個數的素數因子只有2,3,5,7,那么這個數就是完美的.

顯而易見前面幾個完美的數為1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, …

你能告訴我第n個完美的數是多少嘛?

輸入
多組測試數據.每組數據的第一行包含一個正整數n(1<= n<=5842).

輸出
對于每組測試數據輸出第n個完美的數

樣例輸入

1 11 5842

樣例輸出

1 12 2000000000

提示
/*
打表。
用優先隊列。
首先1入隊,
然后1出隊,出隊的同時記錄結果,分別乘2,3,5,7,得到的結果入隊列
然后再讓隊列中一個元素出隊(最大的最小的都可以,我是讓最小的出隊),出隊的同時記錄結果,分別乘2,3,5,7,得到的<=2e9的結果入隊列
直到隊列為空。
*/
ac_code:

#include <bits/stdc++.h> using namespace std; typedef long long LL; const LL maxn = 6000; const LL up = 2e9; LL mp[maxn]; LL step[]= {2,3,5,7}; priority_queue<LL>q; map<LL,bool>vis; int main() {int cnt = 0;vis[1] = true;q.push(-1);while(!q.empty()){LL k = -q.top();mp[++cnt] = k;q.pop();for(int i = 0; i < 4; i++){LL temp = k*step[i];if(temp <= up && !vis[temp]){vis[temp] = true;q.push(-temp);}}}LL n;while(~scanf("%lld",&n)){printf("%lld\n",mp[n]);}return 0; }

一個學長的巧妙的解法:

#include <bits/stdc++.h> using namespace std; const int maxn = 6e3; int mp[maxn]; int main() {int i = 0;int x,y,l,r;mp[++i] = 1;x = y = l = r = 1;while(i <= 5842){int t = min(mp[x]*2,min(mp[y]*3,min(mp[l]*5,mp[r]*7)));if(t == mp[x]*2) x++;if(t == mp[y]*3) y++;if(t == mp[l]*5) l++;if(t == mp[r]*7) r++;mp[++i] = t;}int n;while(~scanf("%d",&n)){printf("%d\n",mp[n]);}return 0; }

總結

以上是生活随笔為你收集整理的问题 C: 完美的数(思维)的全部內容,希望文章能夠幫你解決所遇到的問題。

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