POJ 2729(线性筛+尺取法)

题意:一些整数可以用一个或多个连续的素数和表示。现在他给出你一个正整数n,你要算出这个整数可以有多少种这样的表示方法。
比如:53 有两种表示方法 5 + 7 + 11 + 13 + 17 和 53

思路:先筛出素数表,直接枚举左右端点会超时,所以尺取。

 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int maxn=10005;
const double eps=1e-8;
const double PI = acos(-1.0);
int vis[maxn],prime[maxn],tot;
void shai()
{
    tot=0;
    memset(vis,0,sizeof(vis));
    for(int i=2;i<=maxn;i++)
    {
        //如果未标记则得到一个素数
        if(!vis[i])
        {
            prime[tot++]=i;
        }
        //标记目前得到的素数的i倍为非素数
        for(int j=0;j

 

你可能感兴趣的:(ACM技巧,尺取法)