Primed for Action
3 minutes to read
We are given the following website to write a coding solution:

Problem
We need to write a program that is able find two prime numbers in a list of numbers and multiply these two. For example:
"2 6 7 18 6"->"14"
Solution
Since we are allowed to use C, C++, Python and Rust, let’s write a solution on every language, just because.
C
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
bool is_prime(int n) {
if (n == 2) {
return true;
} else if (n < 2 || n % 2 == 0) {
return false;
}
for (int i = 3; i < n / 2; i += 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
// take in the numbers
char input[4096] = { 0 };
fgets(input, sizeof(input), stdin);
int numbers[1024] = { 0 };
char* token = strtok(input, " ");
int i = 0;
while (token != NULL) {
numbers[i++] = atoi(token);
token = strtok(NULL, " ");
}
// calculate answer
int answer = 1;
while (--i) {
if (is_prime(numbers[i])) {
answer *= numbers[i];
}
}
// print answer
printf("%d\n", answer);
return 0;
}
C++
#include <iostream>
#include <sstream>
#include <vector>
bool is_prime(int n) {
if (n == 2) {
return true;
} else if (n < 2 || n % 2 == 0) {
return false;
}
for (int i = 3; i < n / 2; i += 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
// take in the numbers
std::string s;
std::vector<int> numbers;
int n;
std::getline(std::cin, s);
std::istringstream iss(s);
while (iss >> n) {
numbers.push_back(n);
}
// calculate answer
int answer = 1;
for (int n : numbers) {
if (is_prime(n)) {
answer *= n;
}
}
// print answer
std::cout << answer << std::endl;
return 0;
}
Python
def is_prime(n: int) -> bool:
if n == 2:
return True
if n < 2 or n % 2 == 0:
return False
for i in range(3, n // 2, 2):
if n % i == 0:
return False
return True
# take in the number
numbers = list(map(int, input().split()))
# calculate answer
primes = [n for n in numbers if is_prime(n)]
answer = primes[0] * primes[1]
# print answer
print(answer)
Rust
use std::io;
fn is_prime(n: &i32) -> bool {
if *n < 2 || *n % 2 == 0 {
return false;
} else if *n == 2 {
return true;
}
for i in (3..=n / 2).step_by(2) {
if n % i == 0 {
return false;
}
}
return true;
}
fn main() {
// take in the numbers
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("Failed to read line");
let numbers: Vec<i32> = input
.split_whitespace()
.map(|s| s.parse().expect("Please enter a valid number"))
.collect();
// calculate answer
let answer: i32 = numbers.into_iter().filter(is_prime).product();
// print answer
println!("{}", answer);
}
Flag
Using any of these programs, we are able to solve the chalenge and capture the flag:
HTB{pr1m3_Pr0}