今晚cvte笔试质数那题

今晚cvte笔试质数那题,除了暴力还有其他好的解决思路吗?
题目大意:给定一个数,求出和为该数的三个质数的组合
我只想到找出小于该数的所有质数,然后暴力遍历
#广州视源电子科技股份有限公司#
全部评论
public class Test { public static void main(String[] args) {   int sum=68;//假设所求三数和为68      Set<Integer> s=new HashSet();      ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();     for (int i = 2; i < 100; i++) {//假设求100以内的质数                       int j; for (j = 2; j <= i/2; j++) {     if (i % j == 0) { break;     }                 }                 if (j > i/2) {                 s.add(i);                 }     }         //System.out.println( " ");     for(int i : s){     for(int j:s ){     if(i!=j){     int a=sum-i-j;     if(s.contains(a)&&a!=i){     ArrayList<Integer> ss=new ArrayList<Integer>();     ss.add(a);     ss.add(i);     ss.add(j);     res.add(ss);     }     }     }     } } }
1
送花
回复
分享
发布于 2017-07-28 06:32
会超时?
点赞
送花
回复
分享
发布于 2017-07-26 23:28
滴滴
校招火热招聘中
官网直投
今晚有笔试??
点赞
送花
回复
分享
发布于 2017-07-26 23:35
无聊的时候 写的 看看吧 #include <stdio.h> #include <iostream> #include <unordered_map> #include <vector> using namespace std; bool IsShuSu(int n) { for (int i = 2; i <= sqrt(n); i++) { if (n %i == 0) { return false; } } return true; } void Print(int n) { vector<int> num; vector<vector<int>> res; for (int i = 2; i < n - 2; i++) { if (IsShuSu(i)) { num.push_back(i); } } for (int i = 0; i < num.size() - 2; i++) { int j = i + 1; int k = num.size() - 1; while (j < k) { if (num[i] + num[j] + num[k] == n) {  vector<int> temp = { num[i], num[j], num[k] }; res.push_back(temp); j++; k--; } else if (num[i] + num[j] + num[k] < n) { j++; } else { k--; } } } if (res.size() == 0) { cout << "No" << endl; } for (int i = 0; i < res.size(); i++) { for (int j = 0; j < res[i].size(); j++) { cout << res[i][j] << " "; } cout << endl; } return; } int main(void) { int n = 0; while (cin >> n) { Print(n); } return 0; }
点赞
送花
回复
分享
发布于 2017-07-26 23:50
这笔试是什么情况?
点赞
送花
回复
分享
发布于 2017-07-26 23:58
素数筛选+回溯
点赞
送花
回复
分享
发布于 2017-07-27 07:42
筛选+暴力搜索会超时?
点赞
送花
回复
分享
发布于 2017-07-27 08:07
素数筛选+回溯
点赞
送花
回复
分享
发布于 2017-07-27 08:53
我用的筛选+暴力,但是没有测试用例的地方,连代码能不能编译通过都不知道
点赞
送花
回复
分享
发布于 2017-07-27 12:14
我理解错了,所以做错了
点赞
送花
回复
分享
发布于 2017-07-27 12:30
申请一个数组作为标记,从下遍历2将其中的2的倍数标记为合数,这样会少很多
点赞
送花
回复
分享
发布于 2017-07-28 00:40

相关推荐

点赞 6 评论
分享
牛客网
牛客企业服务