zoukankan      html  css  js  c++  java
  • [UVa1210]Sum of Consecutive Prime Numbers(前缀和,打表)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3651

    题意:问一个数n能拆成多少种连续的素数和。

    筛出所有素数发现只有1200个,维护素数的前缀和,再打出所有区间的前缀和的表,统计出来,直接查询。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn = 10010;
     5 bool isprime[maxn];
     6 int prime[maxn];
     7 int sum[maxn];
     8 int pcnt;
     9 int n;
    10 int mp[5800000];
    11 void init() {
    12   memset(isprime, true, sizeof(isprime));
    13   memset(prime, 0, sizeof(prime));
    14   pcnt = 0;
    15 }
    16 void getPrime() {
    17     init();
    18   prime[0] = prime[1] = 0;
    19   for(int i = 2; i <= maxn; i++) {
    20     if(isprime[i]) prime[++pcnt] = i;
    21     for(int j = 1; j <= pcnt; j++) {
    22           if(i * prime[j] > maxn) break;
    23         isprime[i*prime[j]] = 0;
    24         if(i % prime[j] == 0) break;
    25     }
    26   }
    27 }
    28 
    29 int main() {
    30     // freopen("in", "r", stdin);
    31     // freopen("out", "w", stdout);
    32     getPrime();
    33     memset(sum, 0, sizeof(sum));
    34     sum[0] = prime[0];
    35     for(int i = 1; i < pcnt; i++) sum[i] = sum[i-1] + prime[i];
    36     memset(mp, 0, sizeof(mp));
    37     for(int i = 0; i < pcnt; i++) {
    38         for(int j = i; j < pcnt; j++) {
    39             mp[sum[j]-sum[i]]++;
    40         }
    41     }
    42     while(~scanf("%d", &n) && n) {
    43         printf("%d
    ", mp[n]);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    Java基础总结--面向对象1
    Java基础总结--数组
    Java基础总结--方法(函数)
    Java基础总结--流程控制
    Java基础总结--变量、运算符总结
    Java基础总结--Java编程环境变量配置
    OpenWrt源码结构
    OpenWRT介绍
    内存管理
    makefie中的几种用法
  • 原文地址:https://www.cnblogs.com/kirai/p/6097135.html
Copyright © 2011-2022 走看看