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 }
  • 相关阅读:
    【大胃王】2013暴食女王巅峰战(安吉拉x三宅x正司x木下)熟肉+高能
    破解 CrackMe#1 [UBC] by bRaINbuSY
    栈实现符号平衡检测
    简单的栈
    数独算法
    win32绘图基础
    Win32基础知识整理
    Win32最简单的程序
    初学layer
    android 虚线
  • 原文地址:https://www.cnblogs.com/kirai/p/6097135.html
Copyright © 2011-2022 走看看