Captain Flint and Crew Recruitment
Captain Flint and Crew Recruitment
 
思路
題目大意: 如果一個整數 xxx可以被表示成兩個質數 ppp 和 q(p≠q)q(p≠q)q(p?=q)的積,那我們可以把他叫做為近質數.
輸入一個整數nnn,請將它表示成四個不同的正整數的和,要求其中三個是近質數
我們先列出最小的近質數并尋早規律.
可以看到,最小的三個近質數分別為 2?3,2?5,2?7(6,10,14)2*3,2*5,2*7 (6,10,14)2?3,2?5,2?7(6,10,14)
那也就是說,小于(6+10+14+1=31)(6+10+14+1 = 31)(6+10+14+1=31) 的 nnn 無法被如此表示.
接下來我們考慮重復的情況. 當nnn大于(6+10+14+14=44)(6+10+14+14 = 44)(6+10+14+14=44)的時候,無需考慮重復問題.
那就只需要看看三個特例(6,10,14重復)(6,10,14重復)(6,10,14重復)能不能被其他的方案排列.
3?5153*5 \quad153?515也是近質數,因此我們很容易得到
6101466\quad 10\quad 14 \quad6610146 的替代: 6101556\quad 10 \quad15\quad 5610155
61014106\quad 10\quad 14\quad 106101410 的替代:6101596\quad 10\quad 15\quad 9610159
61014146\quad 10 \quad14\quad 146101414 的替代: 61015136\quad 10\quad 15 \quad136101513
對這三個特例做一個特判即可 時間復雜度為O(1)O(1)O(1)
#include<bits/stdc++.h>using namespace std; int main() {int _;scanf("%d", &_);while (_--) {int n;scanf("%d", &n);// 6 10 14if (n <= 30) {puts("NO");continue;}puts("YES");if (n == 36) {printf("6 10 15 5\n");continue;}if (n == 40) {printf("6 10 15 9\n");continue;}if (n == 44) {printf("6 10 15 13\n");continue;}printf("6 10 14 %d\n", n - 30);} }總結
以上是生活随笔為你收集整理的Captain Flint and Crew Recruitment的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 更好的Google Glass:棱镜变长
- 下一篇: python爬取豆瓣图书top250_p
