如何计算可截素数

  • 什么是可截素数?

它本身是一个素数,如果从左往右逐一截去数字,剩下的仍然都是素数,如果从右往左逐一截去数字,剩下的也仍然都是素数。

例如:3797就是一个可截素数。

从左往右截去数字:797,97,7 都是素数;

从右往左截去数字:379,37,3 都是素数。

  • 题目:求前11个可截素数的和。(注:2,3,5,7 不是可截素数

  • 题目解析

这个题目依然是对素数的处理,对于这种对连续且大量的数据进行素数的判断的问题,我们可以使用素筛法或线性筛法来获得素数表。由于素筛法的时间复杂度是O(log(log(n))) ,而线筛法的时间复杂度可以达到O(n), 当数据规模不大时,二者的程序运行效率的差异是不明显的,但当数据规模非常庞大的时候,线筛法更优。

所以,第一步,构建素数表。

第二步,遍历素数表,判断当前素数值是否满足可截素数的特点。

可截素数的特点就是从左到右和从右到左截去数据,,所得数值依然是素数。

  1. 从左到右截去数字

        以3797为例: 3797 \rightarrow  797 \rightarrow 97 \rightarrow 7 ;可见,从左往右截去数字,就是一个不断去掉最高位的过程。如何去掉一个数N的最高位?用 N 对其最高位的权重 取模。

         3797 的最高位是3,3的权重是1000, 所以 3797 \rightarrow 797 这个截去3的操作就是 3797 % 1000 ;

        797的最高位是7,7的权重是100,所以797 \rightarrow 97 就是 797 %100;

        97 的最高位是9,9的权重是10,所以97 \rightarrow 7 就是97 % 10;

        7已经是个位数,截去操作结束。

        2. 从右往左截去数字

        依然以3797为例:3797 \rightarrow 379 \rightarrow 37 \rightarrow 3; 从右往左截去数字就是一个不断去掉最低位的过程。截掉最低位,就是数字规模缩小10倍,即 N /10 

  • 代码实现
#include <stdio.h>
#include <math.h>#define MAX_N 2000000int prime[MAX_N+5] = {0}; //从prime[1]开始存放素数, prime[0]表示prime数组中素数总个数
int is_prime[MAX_N+5] = {1,1,0}; //用于标记是否为素数,如果i为素数,则is_prime[i] == 0,否则,is_prime[i] == 1;//利用线性筛法构建素数表
void init_prime(){for(int i = 2;i<= MAX_N;i++){if(!is_prime[i]) prime[++prime[0]] = i; //is_prime[i] == 0, 表示数字i为素数,存入primefor(int j = 1; j <= prime[0];j++){if(prime[j] * i > MAX_N) break;is_prime[prime[j] * i] = 1;if(i % prime[j] == 0) break;}}return;
}//将当前素数n执行从左到右截去和从右到左截去后,如果依然是素数,返回1,否则返回0
int is_val(int n){int digit = floor(log10(n)); //求n的位数int temp = n;//从左向右截去数字for(int i = digit; i >0;i--){if(is_prime[temp % (int)pow(10,i)]) return 0;}//从右向左截去数字for(int i = 1 i <= digit; i++){if(is_prime[temp / (int)pow(10,i)]); return 0;}return 1;
}int main(){init_prime();int flag = 11;long long sum = 0;for(int i = 1; i <= prime[0];i++){if(prime[i] > 10 && is_val(prime[i])){sum += prime[i];if(--flag == 0) break;}}printf("sum = %d\n",sum);return 0;
}

代码优化:

int is_val(int n){//从左往右截去int h = pow(10,floor(log10(n))),temp = n;while(n){if(is_prime[n]) return 0;n % h;h /= 10;}//从右往左截去while(temp){if(is_prime[temp]) return 0;temp /= 10;}return 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用three-csg-ts对做物体交互式挖洞

默认物体均为居中&#xff0c;如果指定位置没有发生偏移&#xff0c;可能是因为在执行布尔操作之前没有正确设置变换。确保在进行布尔运算之前应用所有必要的变换。以下是经过修正的完整代码示例&#xff0c;它会确保圆柱正确旋转并与盒子进行 CSG 操作。 安装依赖 首先&…

如何实现网络隔离后,军工单位内网数据导出的安全性?

在现代信息化战争中&#xff0c;军工单位在信息安全方面的需求尤为突出。通常会采用物理隔离&#xff0c;将网络隔离成内网和外网&#xff0c;防止外部网络的恶意入侵和数据窃取。隔离后的数据仍存在内外网交换的需求&#xff0c;即涉及到内网数据导出&#xff0c;因此每日会面…

盒马鲜生礼品卡如何使用?

盒马鲜生的礼品卡除了在门店用以外&#xff0c;还有什么用处啊 毕竟家附近的盒马距离都太远了&#xff0c;好多卡最后都闲置下来了&#xff0c;而且以前都不知道盒马卡还会过期&#xff0c;浪费了好多 还好最近发现了 盒马鲜生礼品卡现在也能在收卡云上兑现了&#xff0c;而且…

深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南

&#x1f4e2;&#x1f4e2;&#x1f4e2; 深入解析 Spring Cloud Sentinel&#xff1a;分布式系统流量控制与熔断降级的全面指南 Spring Cloud Sentinel 是阿里巴巴开源的一款强大的分布式系统流量防卫组件&#xff0c;专为微服务架构设计&#xff0c;提供流量控制、熔断降级…

watcher学习小结

架构 主要是watcher-api&#xff0c;watcher-applier&#xff0c;watcher-decision-engine watcher-applier watcher-decision-engine 将DecisionEngineManager和DecisionEngineSchedulingService封装到oslo_service&#xff0c;然后调service的launch_service&#xff0c;实…

NetSuite ERP项目中非批次物料—批次物料数据转换流程

最近在刚结束的项目上也再次碰到了非批次物料转换为批次物料的操作&#xff0c;因此也想把我们在处理数据流程中的心得写出来&#xff0c;以便复盘与总结&#xff0c;也分享给各位。 整体的步骤我们可分为准备工作&#xff0c;调整工作以及检查工作&#xff1a; 准备工作 主…

抖店退款退货率太高,平台也不帮助商家,快做不下去了怎么办?

我是王路飞。 现在很多商家对抖店的评价是&#xff1a;比拼多多还狠&#xff0c;动不动就扣保证金&#xff0c;退款率太高&#xff0c;而平台一边倒站买家&#xff0c;要是再遇到个别发疯的买家&#xff0c;商家真的很无助。 其实关于抖店退款退货率高、平台也不站在商家这一…

编译结果处理的shell脚本

#!/bin/bash WEB"web" DIST"dist" RED\033[0:31m GREEN\033[0;32m NC\033[0m #生产打包传参 BUILD"b" if [ -e ${WEB} ];then#删历史文件rm -r ${WEB}rm ${WEB}.zip fi #编辑文件 npm run build #检查构建是否成功 if[ -e ${DIST} ];then#改名mv…

分布式事务的八种方案解析(1)

针对不同的分布式场景业界常见的解决方案有2PC、TCC、可靠消息最终一致性、最大努力通知等方案&#xff0c;以下总结8 种常见的解决方案&#xff0c;帮助大家在实际的分布式系统中更好地运用事务。 1.2PC 二阶段提交协议&#xff08;Two-phase commit protocol&#xff09;&…

好用的视频压缩软件

在当今数字化时代&#xff0c;视频已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;视频都扮演着重要的角色。视频的存储空间也越来越大&#xff0c;这给我们的设备存储带来了不小的挑战。因此&#xff0c;学习如何将视频压缩小点成为了一项实用的…

叁[3],VM二次开发异常处理

1&#xff0c;开发环境 VS2022/WPF/.NetFramework4.8 VM4.2 2&#xff0c;"模块状态0&#xff0c;错误码10100005&#xff0c;错误信息:模块与平台不匹配" 现象描述&#xff1a; 1&#xff0c;WPF/NetFramework项目中打开方案&#xff0c;对工具做模板&#xff0c…

开源可视化表单可以用在哪些行业中?

很多客户朋友会询问我们&#xff0c;什么样的行业可以使用低代码技术平台及开源可视化表单&#xff1f;其实&#xff0c;随着社会的进步和发展&#xff0c;很多中小型企业都希望通过低代码技术平台能够让企业实现提质增效的目的&#xff0c;也想借助它的优势特点进入流程化办公…

怎么提升机器人外呼的转化效率

在某些情况下&#xff0c;如市场调查、产品推广等&#xff0c;语音机器人可以高效地完成大量的呼叫任务&#xff0c;并能通过预设的语音脚本和智能识别功能&#xff0c;初步筛选和分类潜在客户。此时&#xff0c;不转人工可能更为高效和经济。 然而&#xff0c;在一些需要深度沟…

jenkins使用注意问题

1.在编写流水线时并不知道当前处在哪个目录&#xff0c;导致名使用不当&#xff0c;以及文件位置不清楚 流水线任务默认路径是&#xff0c;test4_mvn为jenkins任务名 [Pipeline] sh (hide)pwd /var/jenkins_home/workspace/test4_mvn maven任务也是&#xff0c;看来是一样的…

【SpringBoot整合系列】SpringBoot整合kinfe4j

目录 kinfe4j与Swagger的区别 SpringBoot2.x整合kinfe4j1.添加依赖2.启动类注解3.创建Knife4J配置类4.实体类5.接口admin访问 api访问 常用注解汇总SpringBoot3.x整合Kinfe4j启动报错解决1.更换依赖2.启动类3.配置4.配置类5.参数实体类6.接口admin访问 api访问 各版本注解参照 …

树莓派4B学习笔记8:开机自启动Python脚本_kill关闭后台脚本

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 紧接着上篇文章学习的串口通信,今日学习如何让树莓派开机…

【方法】如何解除PDF“打开密码”?

很多人会给PDF文件设置密码保护&#xff0c;防止文件被随意打开。那如果后续想要解除“打开密码”&#xff0c;如何操作呢&#xff1f; 首先&#xff0c;我们要分两种情况来看&#xff0c;一种是知道密码的情况下&#xff0c;不需要保护文件了&#xff0c;也就是不想每次打开P…

若依Ruoyi-vue和element admin的区别,该如何选择。

提到中后台的前端框架&#xff0c;每个人都能列举出很多&#xff0c;这其中提及率比较高的就是Ruoyi和element admin两款&#xff0c;很多小伙伴分不清二者&#xff0c;本文为大家详细讲解一下。 一、若依Ruoyi-vue是什么&#xff1f; 若依Ruoyi-Vue是一款基于 Vue.js 开发的…

React基础教程:TodoList案例

todoList案例——增加 定义状态 // 定义状态state {list: ["kevin", "book", "paul"]}利用ul遍历list数组 <ul>{this.state.list.map(item ><li style{{fontWeight: "bold", fontSize: "20px"}} key{item.i…

DAC测试实验——FPGA学习比

一、DAC简介 DAC全称Digital to Analog Converter&#xff0c;即数模转换器。它用于将主控芯片产生的数字值(0和1)转换为模拟值(电压值)。 1、DAC参数指标 2、DAC类型 常用的DAC可大致分为权电阻网络DAC、T型电阻网络DAC、倒T型电阻网络DAC以及权电流型DAC。 3、AD9708/3PD9…