zoukankan      html  css  js  c++  java
  • Sum of Consecutive Prime Numbers UVA3399 C

    这道题中由于素数的范围只有10000(比较小),因此可以计算出10000以内的所有素数,存储到一个数组中,方便计算素数和的时候使用。

    因为一个素数的倍数都不是素数,所以可以从2的倍数开始剔除,2的倍数剔除完后剔除3的倍数,......,以此类推。

    计算完素数后需要计算一个正整有多少个连续素数的表示

    对每个输入,使用一个二重循环,外循环枚举所有小于等于输入的素数 a[i],内循环从a[i]开始往后加,计算连续素数的和,直到10000以内的所有素数都加完了或 和大于等于输入为止。内循环结束后,如果和与输入相等,个数加一。外循环结束后,输出个数。

    我觉得这道题的重点是计算素数的方法。

    但使用bool数组在POJ上未能通过编译。

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <math.h>
     4 #include <stdbool.h>
     5 
     6 void prime(bool a[],int b[]){//离线生成素数数组 
     7     int i,j;
     8     for(i=0;i<10000;i++) a[i]=true;//初始化布尔数组
     9     for(i=2;i<(int)sqrt(10000);i++){
    10         if(a[i]){
    11             for(j=i;j*i<=10000;j++){
    12                 a[j*i]=false;
    13             }
    14         }
    15     }
    16     j=0;
    17     for(i=2;i<10000;i++){
    18         if(a[i]) b[j++]=i;
    19     }
    20 }
    21 
    22 
    23 int main(void){
    24     int i,j=0,k,sum=0,ans,n=0;
    25     int a[1229];//素数数组 
    26     bool flagArray[10000];//布尔数组
    27     prime(flagArray,a);
    28     while(scanf("%d",&n)==1){
    29         if(n==0) break;
    30         for(i=0;a[i]<=n;i++){
    31             sum=0;
    32             for(j=i;sum<n&&j<1229;j++) if(sum<n) sum+=a[j];
    33             if(sum==n) ans++;
    34         }
    35         printf("%d
    ",ans);
    36         ans=0;
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    React 父调子 子调父 observer.js 非父子传值
    echarts 折线图
    跳转新页面解决用户重新登录的方法
    微信小程序规范 引入框架 引入外部js css
    js 400
    Angular2 表单校验
    Angular2 登录页进门户页 用户接口正常 从服务平台退出到门户页 登录接口报302
    CSP-S 2020 SC 迷惑行为大赏
    【题解】[CSP-S 2020] 函数调用【拓扑图DP】
    【题解】[CSP-S 2020] 动物园
  • 原文地址:https://www.cnblogs.com/20174317zhuyuan/p/9386146.html
Copyright © 2011-2022 走看看