HDOJ6479质数串

博客主要讨论了HDOJ6479质数串问题,解释了质数串的定义并给出了解题思路。博主首先列举了100以内的质数串,接着分析了长度为3的质数串情况,通过排除法确定了符合条件的子串。进一步,博主证明了不存在长度大于等于4的质数串,并提供了源码实现。
摘要由CSDN通过智能技术生成

HDOJ6479质数串

题目链接

题面

一个正整数x是质数,当且仅当x≥2且x不是任何一个[2,x−1]的数的倍数。

一个数字串是’‘质数串’’,当且仅当它的每个非空连续子串表示的数字都是质数。

例子1:“373"是质数串,它的子串有"3”、“37”、“373”、“7”、“73”、“3”,这些串表示的数字都是质数。

例子2:"55"不是质数串,因为"55"这个子串表示的数字不是质数。

相信聪明的你一定已经发现了一个事实,那就是质数串的限制很紧,所以质数串的数量其实非常稀少。

给定一个长度为n的数字串S,请统计它有多少个非空连续子串是质数串。注意两个子串如果位置不同也算不同,比如"373373"中,"373"要算入答案两次。

解题思路

先口算出100以内的所有质数串 2,3,5,7,23,37,53,73

接下来考虑S的长度为3的情况

因为所有以2或者5结尾的数必定是2或者5的倍数,所以后面的那两位只能是3或者7,但是不能是连续的33和77因为这能够被3或者7整除,所以一共有237,273,573,537,373,737这三个数,计算只有373符合条件

接下来考虑S的长度为4的情况

根据规律一共有2373,5373,7373个备选方案,然后全部都不符合条件

因为不存在S长度为4的质数串,所以根据质数串的定义,所以得出不存在长度大于等于4的质数串

源码

#include <bits/stdc++.h>
#define DEBUG puts("Here is a BUG")
#define MEM(a,b) memset((a),(b),sizeof(a))
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define PI 3.1415926535897932626
#define all(a) a.begin(),a.end()
typedef long long
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值