掃き出さ連続素数のUVA1210連続した素数の和
10000 1内のすべての素数を一掃し、素数のプレフィックスを記録します。
暴力とはO(n ^ 2)。
思考の列車がキューが追加されている使用することで、チームが満たされていないがあり、O(n)が可能
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 typedefの長い 長いLL。 4 5 のconst int型 MAXN = 1E4 + 5 。 6 7 LL和[MAXN]。 8 9 ブールis_prime [MAXN]。 10 INT プライム[MAXN]。 11 int型ふるい(int型N) 12 { 13 のために(int型 i = 0 ; iは<N =、iは++ ) 14 is_prime [I] = 真。 15 is_prime [ 0 ] = is_primeが[ 1 ] = 偽。 16 のint、P = 0 。 17 のためには、(int型 i = 1 ; iがn = <; iは++ ) 18 { 19 であれば(is_prime [I]) 20 { 21 プライム[++のP] = I。 22 のために(int型 J =私は* 2、J <= N; J + = I) 23 { 24 is_prime [j]は= 偽。 25 } 26 } 27 } 28 リターンP。 29 } 30 31 32 のint main()の 33 { 34 INT N。 35 INT P =ふるい(10000 )。 36 // freopenは( "A.TXT"、 "R"、STDIN)。 37 のために(int型 I = 1 ; I <= P iが++ ) 38 { 39 和[I] + =プライム[I] +和[I- 1 ]。 40 } 41 ながら(CIN >> N) 42 { 43 LL ANS = 0 。 44 であれば(N == 0)ブレーク。 45 のためには、(int型 I = 1 ; I <= P、iは++ ) 46 { 47 であれば(プライム[I]> n)を破ります。 48 のための(int型 J = I; J <= P; J ++ ) 49 { 50 であれば(和[J] -sum [I- 1 ] == n)はANS ++ 。 51 } 52 } 53 COUT << ANS << ENDL。 54 } 55 リターン 0 。 56 }