hdu 5104 Primes Problem (素数 打表 水)

http://acm.hdu.edu.cn/showproblem.php?pid=5104

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int isp[10000+100];
int prime[10000];
int coun;
bool isprime(int x)
{
  int i,j;
  for(i=2;i<=sqrt(x);i++)
  {
    if(x%i==0) return false;
  }
  return true;
}
void fun()
{
  int i,j;
  for(i=2;i<=10000;i++)
  {
    if(isp[i]!=0) continue;
    if(isprime(i))
    {
        isp[i]=1;
        prime[coun++]=i;
    }
    j=i;
    while(j+i<=10000)
    {
      j+=i;
      isp[j]=2;
    }
  }
}
int main()
{
  //freopen("output.txt","w",stdout);
  int ans;
  int i,j,k,n;
  memset(isp,0,sizeof(isp));
  coun=0;
  fun();
  //printf("%d...\n",coun);
  while(scanf("%d",&n)!=EOF)
  {
    int ans=0;
    for(i=0;i<coun;i++)
    {
      if(prime[i]>n/3) break;
        for(j=i;prime[j]<=(n-prime[i])/2;j++)
        {
            k=n-prime[i]-prime[j];
            if(isp[k]==1) ans++;
        }
    }
    printf("%d\n",ans);
    //n++;
  }
  return 0;
}

时间: 2024-11-02 01:57:55

hdu 5104 Primes Problem (素数 打表 水)的相关文章

hdu 5104 Primes Problem (素数+递推)

Problem Description Given a number n, please count how many tuple(p1, p2, p3) satisfied that p1<=p2<=p3, p1,p2,p3 are primes and p1 + p2 + p3 = n. Input Multiple test cases(less than 100), for each test case, the only line indicates the positive int

HDU 5104 Primes Problem(数学)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5104 Problem Description Given a number n, please count how many tuple(p1, p2, p3) satisfied that p1<=p2<=p3, p1,p2,p3 are primes and p1 + p2 + p3 = n. Input Multiple test cases(less than 100), for each

hdu 5104 Primes Problem(prime 将三重循环化两重)

//宁用大量的二维不用量小的三维 #include <iostream> #include<cstdio> #include<cstring> using namespace std; int prime[1000],num[10005]; int Cout; void initPrime() { for(int i=2;i<=10000;i++) num[i]=1; for(int i=2;i<=10000;i++) { if(num[i]) { for(

UVA1213 Sum of Different Primes(素数打表+dp)

UVA - 1213 Sum of Different Primes Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description A positive integer may be expressed as a sum of different prime numbers (primes), in one way or another. Given two

hdu 4548 筛法求素数 打表

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4548 Problem Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识. 问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数. 给定一个区间,你能计算出这个区间内有多少个美素数吗? Input 第一行输入一个正整数T,表示总共有T组数据

HDU 2161 Primes (素数筛选法)

题意:输入一个数判断是不是素数,并规定2不是素数. 析:一看就很简单吧,用素数筛选法,注意的是结束条件是n<0,一开始被坑了... 不说了,直接上代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; typedef long long LL; const int maxn = 16000 + 10; int p

POJ 2739 Sum of Consecutive Prime Numbers(素数打表水题)

[题意简述]:题意很简单,就是用连续的素数加和,计算有多少个这样的连续的素数数列可以使这个序列的和等于输入的数. [分析]:很经典的素数模板,基本所有有关素数的题,我都会使用这个模板. // 268K 16Ms #include<iostream> using namespace std; #define N 10000 bool isprime[N]; long long prime[1300],nprime; // 注意long long void doprime() { long lon

POJ 1595 素数打表水题

[题意简述]:给出N和C,让我们求出N以内的包括N的素数,然后根据若N以内的素数为奇数个,就将中间2*c-1个素数输出:若为偶数个,就将中间2*c个素数输出. [分析]:只要题意理解就简单了. 详见代码: // 224K 16Ms #include<iostream> using namespace std; #define N 2000 bool isprime[N]; int prime[N],nprime; void doprime(int n) { int i,j; nprime =

【转】HDU 3199 Hamming Problem: 规律打表

应该不是数论···逻辑思维?找规律?暂且放到支个分类下··· 我的理解: 数组 num表 保存 只有P1 P2 or P3的因子的 常数 并按递增顺序. 通过已有的常数 每次循环相应的乘以P1 P2 P3, 就保证了表中的 常数 的因子排他性. 也可以 手推+程序显示 探究其规律. #include<iostream> using namespace std; const int Size=100000; long long num[Size]; int main() { long long