fbpx

Problema #298 – SumSec – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Se dă un şir format din n elemente, numere naturale. Calculaţi suma elementelor din secvenţa determinată de primul şi ultimul element prim.

Date de intrare

Fişierul de intrare sumsec.in conţine pe prima linie numărul n; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii.

Date de ieşire

Fişierul de ieşire sumsec.out va conţine pe prima linie numărul S, reprezentând suma calculată.

Restricţii şi precizări

  • 1 ≤ n ≤ 1000
  • elementele şirului vor avea cel mult 9 cifre
  • şirul va conţine cel puţin un element prim

Exemplu

sumsec.in

8
12 10 15 7 17 10 19 14

sumsec.out

53

Explicație

7+17+10+19=53

#include <bits/stdc++.h>
using namespace std;

ifstream fin("sumsec.in");
ofstream fout("sumsec.out");

int prim(int n)
{
    int cnt=1;
    int d=2;
    while(n>1)
    {
        int p = 0;
        while(n%d==0)
        {
            p++;
            n/=d;
        }
        if(p>0)
            cnt*=(p+1);
        d++;
        if(d*d>n)
            d=n;
    }
    if(cnt==2)
    return 1;
    else
    return 0;
}

int main()
{
    int n;
    fin >> n;
    long long int a[1000];
    int cnt=0;
    long long int p = 0 , u = 0 , s = 0;
    for(int i = 0 ; i < n ; ++i)
    {
        fin >> a[i];
        if(prim(a[i]) && cnt==0)
        {
        p=i;
        cnt++;
        }
        if(prim(a[i]))
        u=i;
    }
    for(int i = p ; i <= u ; ++i)
    {
        s+=a[i];    
    }
    fout << s;
    
    fin.close();
    fout.close();
    
    return 0;
}
Comentarii

S-ar putea sa iti placa