POJ 2739 素数打表

题意:给你一个数问你用连续的素数来表示这个数有几种表示方法。

先打一个素数表,再把素数表变下形,prime[i]存prime[i]之前的素数和,循环一下打出ans表即可。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 10050
int prime[maxn],nprime,ans[maxn];
bool isprime[maxn];
void getprime()
{
    memset(isprime,1,sizeof(isprime));
    nprime=0;
    long long i,j;
    for(i=2; i<maxn; i++)
        if(isprime[i])
        {
            prime[++nprime]=i;
            for(j=i*i; j<maxn; j+=i)
                isprime[j]=0;
        }
}
int main()
{
    getprime();
    prime[0]=0;
    memset(ans,0,sizeof(ans));
    for(int i=2; i<=nprime; i++)
        prime[i]=prime[i]+prime[i-1];
    for(int i=0; i<=nprime; i++)
        for(int j=i+1; j<=nprime; j++)
            if(prime[j]-prime[i]<maxn)
                ans[prime[j]-prime[i]]++;
            else
                break;
    int n;
    while(~scanf("%d",&n),n)
        printf("%d\n",ans[n]);
    return 0;
}
时间: 2024-12-01 09:20:42

POJ 2739 素数打表的相关文章

poj 2739 Sum of Consecutive Prime Numbers【素数筛】

我觉得这题的数据应该有些刁钻,一共至少提交了五次,一直是WA,无语了......用一个result数组存素数硬是不对.后来就算了,改用直接判断(法二),继续WA,后来发现是MAXN至少应为10002(被数据坑了),终于A掉了...... 后来继续改法一多次,任然WA,一直不清楚原因. 继续思考发现有一个很隐蔽的问题就是我后来用到   if(result[i]>n) break;    而result数组中 10000以内 最后一个素数是 9997,后面全是0了.这样无法停止,所以必须加一个大数作

POJ 1595 素数筛法

题意让求一段素数中间的几个素数 用素数筛法筛出范围内的素数然后确定一下就行了 注意题目中1也算作素数了 具体看代码 #include <iostream> #include<cstdio> #include<cstring> using namespace std; #define max 2000 bool isprime[max]; int prime[max],nprime; void getprime() { memset(isprime,1,sizeof(is

POJ 2042 暴力打表

题目描述让求出一个数最多4个数的平方和组成有多少种 暴力打表直接出来了 #include <iostream> #include<cstdio> #include<cstring> using namespace std; int ans[33000]; int main() { int n; memset(ans,0,sizeof(ans)); for(int i=0; i<=181; i++) for(int j=i; j<=181; j++) for(

HDOJ(HDU) 2161 Primes(素数打表)

Problem Description Write a program to read in a list of integers and determine whether or not each number is prime. A number, n, is prime if its only divisors are 1 and n. For this problem, the numbers 1 and 2 are not considered primes. Input Each i

POJ 1365 小整数分解

题意:给你一个数的,素数次幂乘积形式的表示让你求出这个数减一的素数次幂乘积的表示形式. 这题就是麻烦,首先打一个素数表,然后把输入存成字符串形式,在还原成数,再分解,再输出. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxn 50000 char c[maxn]; int num[maxn],

代码-如何解决大素数分解问题??

问题描述 如何解决大素数分解问题?? 用C++写了一个分解大素数的代码,结果却出来这样的结果,请问是怎么回事??该如何解决?? 输入数据:1801440097841710589 GNU MP: Cannot reallocate memory This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for

HDOJ 1164 Eddy&amp;#39;s research I(拆分成素数因子)

Problem Description Eddy's interest is very extensive, recently he is interested in prime number. Eddy discover the all number owned can be divided into the multiply of prime number, but he can't write program, so Eddy has to ask intelligent you to h

HDOJ 2098 分拆素数和

Problem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束. Output 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行. Sample Input 30 26 0 Sample Output 3 2 素数打表法! import java.util.Scanner; public class Main { static int[] a = new int[10001

关于用 java 实现算法编程的困惑

问题描述 嗯,没错,我们都知道c,c++等机器执行效率很高,java在这方面没法比,但是我只喜欢java,最近在poj上做题,由于我是菜鸟,就挑简单点的做,这不,今天碰到的个非常水的题,如下:http://poj.org/problem?id=1953,这个题,想了会,找了会规律发现,根本不用去遍历,这个题就是个典型的数学题,小学生都会,如下:n=1answer=2n=2answer=3n=3answer=5n=4answer=8n=5answer=13呵呵,看到规律了吧,我还是不放心,我用遍历