当前位置: 首页 > news >正文

欧拉计划 Project Euler60(素数对集合)题解

欧拉计划 Project Euler 60 题解

  • 题干
  • 思路
  • code

题干

在这里插入图片描述

思路

先欧拉筛预处理出素数,然后dfs,注意剪枝,不然太容易炸了

code

//13 5197 5701 6733 8389 
//26033
#include <bits/stdc++.h>using namespace std;using ll = long long;bool isprime(ll x) {if (x < 2) return false;for (ll i = 2; i * i <= x; ++i) {if (x % i == 0) return false;}return true;
}// 检查两个数拼接后是否是素数
bool check(ll a, ll b) {string s1 = to_string(a) + to_string(b);string s2 = to_string(b) + to_string(a);return isprime(stoll(s1)) && isprime(stoll(s2));
}// Euler筛提前先筛选一部分素数
vector<int> generatePrime(int li) {vector<int> pris;bool vis[li + 1];memset(vis, true, sizeof(vis));for (int i = 2; i < li; ++i) {if (vis[i]) pris.push_back(i);for (int p : pris) {if (i * p >= li) break;vis[i * p] = false;if (i % p == 0) break;}}return pris;
}// dfs 找满足条件的素数
void dfs(vector<int> &pris, vector<int> cur, int idx, int &minsum, vector<int> &ans) {if (cur.size() == 5) {int sum = 0;for (int p : cur) {sum += p;}if (sum < minsum) {minsum = sum;ans = cur;}return ;}for (int i = idx; i < pris.size(); ++i) {bool flag = true;for (int p : cur) {if (!check(p, pris[i])) {flag = false;break;}}if (flag) {cur.push_back(pris[i]);dfs(pris, cur, i + 1, minsum, ans);cur.pop_back();}}
}void solve() {int li = 10000;vector<int> pris = generatePrime(li);vector<int> cur, ans;int minsum = INT_MAX;dfs(pris, cur, 0, minsum, ans);for (int p : ans) {cout << p << " ";}cout << "\n";cout << minsum << "\n";}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int tt = 1; // cin >> tt;while (tt--) {solve();}return 0;
}

在这里插入图片描述

相关文章:

  • 双系统安装 ios放同一个u盘 ventory使用+windows安装,双系统互相访问中间盘 切换默认启动系统
  • 巧记英语四级单词 Unit7-上【晓艳老师版】
  • 多块盘创建RAID5以及后增加空间
  • 小结:PKI(Public Key Infrastructure,公钥基础设施)
  • CSdiy java 06
  • 西门子笔记四:Uart模块
  • 异步机制与 CPU 的关系解析
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 15)
  • 当 AI 成为 “数字新物种”:人类职业的重构与进化
  • 角度(degrees)和弧度(radians)转换关系
  • Glide 如何加载远程 Base64 图片
  • 链表反转操作经典问题详解
  • 关于 const a 定义的数据 与 其渲染 的问题。即通过const定义的常量,会不会导致渲染不及时。
  • 原语的使用
  • 归并排序排序总结
  • 创建RAID1并扩容RAID
  • 使用C# ASP.NET创建一个可以由服务端推送信息至客户端的WEB应用(1)
  • Redis分布式锁使用以及对接支付宝,paypal,strip跨境支付
  • Qwen3-8B安装与体验-速度很快!
  • 国内无法访问GitHub官网的问题解决
  • 胸外科专家查出肺多发结节,说了一个可怕的事实……
  • 浦发银行一季度净利175.98亿增1.02%,不良率微降
  • 在循环往复的拍摄中,重新发现世界
  • 4月份全国93个国家气象站日最高气温达到或突破极值
  • 女乘客遭顺风车甩客、深夜丢高速服务区,滴滴霸道回应:赔五百元
  • 旧衣服旧纸箱不舍得扔?可能是因为“囤物障碍”