UVA1210 连续素数之和 Sum of Consecutive Prime Numbers
题意
给你一个数,询问有多少个连续质数序列和等于该数。
分析
首先打一个素数表,计算每一段素数的和,用一个数组记录每一个和有多少段连续的素数和能凑成,预处理好每一个和对应的答案,直接输出即可。时间复杂度: 。
代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e4+7;
int n,ans[MAXN],pre[MAXN];
vector<int>prime;
bool isprime[MAXN];
void sieve()
{
for(int i=0;i<=MAXN;i++)
{
isprime[i]=true;
}
isprime[0]=isprime[1]=false;
for(int i=2;i<=MAXN;i++)
{
if(isprime[i])
{
for(int j=2*i;j<=MAXN;j+=i)
{
isprime[j]=false;
}
}
}
}
int mp[MAXN*MAXN];
int main()
{
sieve(); //埃筛
int i,j,k;
for(i=0;i<=MAXN;i++)
{
if(isprime[i]) prime.push_back(i); //打素数表
}
pre[0]=prime[0];
int m=prime.size();
for(i=1;i<m;i++)
{
pre[i]=pre[i-1]+prime[i]; //p[i]表示前i个素数的和
}
for(i=0;i<m;i++)
{
for(j=i;j<m;j++)
{
int x=pre[j]-pre[i-1]; //从第i个素数到第j个素数的和
mp[x]++; //mp[x]表示和为x的连续素数的段数
}
}
while(~scanf("%d",&n)&&n)
{
printf("%d\n",mp[n]);
}
return 0;
}
本文作者:l_x_y
本文链接:https://www.cnblogs.com/lxy-2022/p/UVA1210-Solution.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
标签:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步