Partida Rol por web

[TALLER] Online Math Open: Umbria team

Problema 1

Cargando editor
28/10/2019, 22:28
Atreide

Compute the sum of all positive integers n such that the median of the n smallest prime numbers is n.

Cargando editor
29/10/2019, 08:57
Atreide

He estado unos minutos entendiendo qué quiere decir este problema, y lo que he comprendido es lo siguiente.

Tomamos el número 3, por ejemplo. Los 3 primeros primeros son 2, 3 5, cuya mediana es 3. Cumpliría el enunciado.

Lo mismo pasa con el 4, con el 5, con el 6 y con el 7.

Con el 8, sin embargo, los primos serían 2, 3, 5, 7, 11, 13, 17, 19, y su mediana sería 9.

Con el 9 serían  2, 3, 5, 7, 11, 13, 17, 19, 23, y su mediana 11.

Se trata de sumas los números que sí cumplen que la suma sea la misma que la cantidad de números.

Cargando editor
29/10/2019, 09:27
Atreide

He hecho un pequeño programa para que autocalcule con qué números pasa eso para los 10 mil primeros (o la cantidad que se ponga). Genera un vector de primos y comprueba si su tamaño es igual a su mediana. Sólo se cumple para los números 3, 4, 5, 6 y 7, así que estamos de suerte. Pego aquí el programa por si queréis echarle un ojo.

#include <iostream>
#include <vector>

using namespace std;

bool primo(int n){
bool p=true;
for (int i=2;i<=n/2;i++) if (n%i==0) p=false;
return p;
}

bool check(vector <int> v){
if (v.size()%2!=0 && (v.size())==v[(v.size()-1)/2]) return true;
else if(v.size()%2==0 && (v.size()*2==(v[v.size()/2]+v[v.size()/2-1]))) return true;
else return false;
}

int main(){

    vector <int> v(0);
    for (int i=2;i<10000;i++){
        if (primo(i)) {
                v.push_back(i);
                if (check(v)) cout<<v.size()<<endl;
        }
    }
}

Cargando editor
29/10/2019, 09:35
udas

No le veo ningún fallo al programa, así que creo que tenemos la solución.

Cargando editor
29/10/2019, 09:49
Atreide

Pues si el resto de gente lo ve bien, la suma de esos números, que es lo que piden, da 25.

Solución: 25.