欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Captain Flint and Crew Recruitment

发布时间:2023/12/16 74 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Captain Flint and Crew Recruitment 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Captain Flint and Crew Recruitment

思路

题目大意: 如果一个整数 xxx可以被表示成两个质数 pppq(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)23,25,276,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 \quad153515也是近质数,因此我们很容易得到

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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。