Ο καθηγητής των Μαθηματικών λέει στον Πέτρο: το γινόμενο δύο ακεραίων αριθμών και στον Παύλο το άθροισμα τους. Κανείς τους δεν γνωρίζει τους αριθμούς που είπε ο καθηγητής στον άλλον.
Τότε, ο άλλος απαντά: Κάνεις λάθος, ο αριθμός είναι 136.
Ποιους αριθμούς είπε ο καθηγητής στον καθένα;
Mediterranean Mathematics Olympiad 2005
Διασκεδαστικά Μαθηματικά www.eisatopon.blogspot.com
1. Η Πέτρος δεν μπορεί να είναι αυτός που κάνει την πρώτη δήλωση, μιας και θα μιλούσε μόνο αν ο αριθμός του ήταν πρώτος. Κι αυτό γιατί τότε θα μπορούσε να συμπεράνει πως ο Παύλος είχε τον αριθμό s=p+1 (αφού ένας πρώτος αριθμός αναλύεται μόνο στο γινόμενο 1 επί τον εαυτό του). Άρα πρώτος μίλησε ο Παύλος.
ΑπάντησηΔιαγραφή2. H Παύλος τώρα, σκεπτόμενος ανάποδα, διαπίστωσε ότι αφαιρώντας 1 από τον αριθμό του δεν προκύπτει πρώτος αριθμός. Άρα ο Πέτρος δεν θα μπορούσε - με βάση το προηγούμενο σκεπτικό - να καταλάβει τον αριθμό του. Έτσι δήλωσε "Δεν μπορείς να μαντέψεις τον αριθμό που είπε σε μένα".
3. Η Πέτρος όμως, εξαιτίας αυτής της δήλωσης του Παύλου, αντιλαμβάνεται ότι το s-1, δηλαδή το x+y-1, δεν είναι πρώτος.
4. Για να καταλήξει στη 2η δήλωση, σημαίνει ότι ο αριθμός που έχει μπορεί να αναλυθεί σε γινόμενο δύο αριθμών x και y με ένα και μόνο τρόπο ώστε να ισχύει ότι x+y-1 δεν είναι πρώτος.
5. Αν τρέξει κανείς τον παρακάτω R κώδικα θα δει ότι υπάρχει μόνο μία περίπτωση ένας αριθμός x*y, όπου x+y = 136, να μπορεί να αναλυθεί σε γινόμενο δύο αριθμών x και y με ένα και μόνο τρόπο ώστε να ισχύει ότι x+y-1 δεν είναι πρώτος. Όταν ο ένας είναι το 1 και ο άλλος το 135.
# Κώδικας σε R ############################
library(numbers)
library(spuRs)
for (x in 1:68) {
fact = c(1, primeFactors(x * (136 - x)))
print(fact)
ve <- vector()
for (i in 1:(length(fact) - 1)) {
total = fact
first <- combn(total, i, MARGIN=2)
second <- apply(first, 2, function(z) total[is.na(pmatch(total, z))])
if (is.null(dim(second)))
second <- matrix(second, ncol = length(second))
for (j in 1:ncol(first)) {
u = 0
u = u + 1 - prime(prod(first[, j]) + prod(second[, j]) - 1)
if (u == 1 & !(prod(first[, j]) %in% ve)) {
cat('x=',x," y=",136-x," first=",prod(first[, j])," second=",prod(second[, j]),"\n")}
ve <- c(ve,prod(first[, j]),prod(second[, j]))
}
}
}