uva1210

题目连接:UVA - 1210

 1 #include<cstdio>
 2 #include<cmath>
 3 const int maxn=10010;
 4 int pri[maxn];
 5 int ispri[maxn];
 6 int sum[maxn];
 7 int cnt;
 8 void init()
 9 {
10     cnt=1;
11     int m=sqrt(maxn+0.5);
12     for(int i=2;i<=m;i++) if(!ispri[i])
13         for(int j=i*i;j<=maxn;j+=i)
14         ispri[j]=1;
15         for(int i=2;i<=maxn;i++)
16             if(!ispri[i]) pri[cnt++]=i;
17
18 }
19
20 int main()
21 {
22     int n;
23     init();
24
25     for(int i=1;i<cnt;i++)
26         sum[i]=sum[i-1]+pri[i];
27
28     while(scanf("%d",&n)&&n)
29     {
30         int ans=0;
31         for(int i=1;i<=cnt;i++)
32         {
33             int temp=sum[i]-n;
34             for(int j=0;j<=i;j++)
35                 if(sum[j]==temp) ans++;
36         }
37         printf("%d\n",ans);
38     }
39 }
时间: 2024-11-14 23:24:53

uva1210的相关文章

UVA1210(连续素数和)。

继续寻找水题... 把所有的素数存进一个数组,然后用递归的方法做比较简单. 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <cmath> 7 8 using namespace std; 9 const int maxn = 100000; 10

[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

习题10-6 连续素数之和 UVa1210

1.解题思路:点击打开链接 2.解题思路:本题要求寻找连续个素数相加为n的个数.由于n的范围不大, 因此可以事先打表.计算好所有的连续和的个数,最后直接输出即可. 3.代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set> #include<vecto

UVa 1210 连续素数之和

https://vjudge.net/problem/UVA-1210 题意: 输入整数n,有多少种方案可以把n写成若干个连续素数之和? 思路: 先素数打表,然后求个前缀和. 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<queue> 6 using namespace std; 7 typedef long lon