zoukankan      html  css  js  c++  java
  • poj 2739 Sum of Consecutive Prime Numbers 解题报告

    题目链接:http://poj.org/problem?id=2739

           预处理出所有10001以内的素数,按照递增顺序存入数组prime[1...total]。然后依次处理每个测试数据。采用双重循环计算n的表示数:

           外循环i :  for (i = 0; x >= prime[i]; i++) 的循环结构枚举所有可能的最小素数prime[i];

           内循环:   while (ans < x && j < total)   ans += prime[j++];    计算连续素数的和ans,内循环结束时ans>=x。若ans = n,则连续素数的和的表示数为sum++,继续外循环。外循环结束后得出的sum即为问题的解。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 const int Maxn = 10000;    // 设定素数表长
     5 int total, prime[Maxn];
     6 
     7 int is_prime(int n)         // 判断n是否为素数
     8 {
     9     int i;
    10     for (i = 0; i < total; i++)
    11     {
    12         if (!(n % prime[i]))
    13             return 0;
    14     }
    15     return 1;
    16 }
    17 
    18 int main()
    19 {
    20     int i, j, x, ans, sum;
    21     total = 0;
    22     for (i = 2; i <= Maxn; i++)    // 预先建立素数表
    23     {
    24         if (is_prime(i))
    25         {
    26             prime[total++] = i;
    27         }
    28     }
    29     while (cin >> x && x)
    30     {
    31         sum = 0;    // 和初始化为0
    32         for (i = 0; x >= prime[i]; i++)     // 枚举最小素数
    33         {
    34             j = i;
    35             ans = 0;    
    36 while (ans < x && j < total) 37 { 38 ans += prime[j++]; // 求连续素数的和


    39 } 40 if (ans == x) // 若和恰等于x,则累计答案数


    41 sum++;
    42 if (is_prime(x)) // 该数是素数时,和也要包括自己

    43 sum++; 44 } 45 cout << sum << endl; 46 } 47 return 0; 48 }
  • 相关阅读:
    nodeJS + webStrome
    js获取浏览器窗口属性
    理解JavaScript中的arguments,callee,caller,apply
    Java对象及对象引用变量
    Transform-style和Perspective属性
    线程同步的几种方式
    SQL高级查询——50句查询(含答案)
    接口、抽象类的区别与共同点
    JAVA异常架构图及常见面试题
    【转】JVM介绍
  • 原文地址:https://www.cnblogs.com/windysai/p/3231380.html
Copyright © 2011-2022 走看看