În zorii zilei, harnicele albinuţe se pregătesc să zboare la cules de nectar. În apropierea stupului, se află o grădină fermecată cu N flori, numerotate 1, 2,… N. Pentru fiecare floare se cunoaște numărul de petale.
Anumite flori din grădină pot fi flori capcană. O astfel de floare are un număr prim de petale. Dacă o albină s-ar aşeza pe corola florii capcană, atunci floarea i-ar fura o cantitate de nectar egală cu numărul ei de petale.
Alte flori pot fi florile abundenţei. Numărul de petale ale florii abundenţei are un număr impar de divizori. Dacă o albină s-ar aşeza pe corola unei astfel de flori, atunci ea i-ar dărui albinuţei o cantitate de nectar egală cu triplul numărului ei de petale.
Celelalte flori pot fi flori obişnuite. Dacă o albină s-ar aşeza pe corola unei flori obişnuite, atunci floarea i-ar dărui albinuţei o cantitate de nectar egală cu numărul ei de petale.
Regina stupului, le-a poruncit albinuţelor să adune cea mai mare cantitate de nectar care se poate culege din grădină, altfel … vor fi alungate din stup.
Cerinţă
Scrieţi un program care să citească numerele naturale N și numărul de petale ale fiecărei flori şi care să determine cantitatea maximă C de nectar pe care albinuţele o pot aduna din grădina fermecată.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând numărul de petale ale fiecărei flori.
Date de ieșire
Programul va afișa pe ecran numărul C.
Restricții și precizări
1 ≤ n ≤ 100 000- fiecare floare are cel mult
10 000petale - Nectarul unei flori poate fi cules de o singură albină.
- Cantitatea maximă
Cde nectar culeasă este un număr natural,C ≤ 2 000 000 000
Exemplu
Intrare
8 25 13 10 7 1 12 31 102
Ieșire
202
Explicație
Cantitatea maximă de nectar se obţine din florile 1, 3, 5, 6 şi 8. C=3x25+10+3x1+12+102=202
#include <bits/stdc++.h>
using namespace std;
int prim(int n)
{
int d=2;
int cnt=1;
while(n>1)
{
int p = 0;
while(n%d==0)
{
n/=d;
p++;
}
cnt*=(p+1);
d++;
if(d*d>n)
d=n;
}
if(cnt==2)
return 1;
else
return 0;
}
int main()
{
int n;
cin >> n;
int x;
int s=0;
for(int i = 0 ; i < n ; ++i)
{
cin >> x;
int m=sqrt(x);
if(m*m==x)
s+=3*x;
else if(prim(x))
s+=0;
else
s+=x;
}
cout << s;
}