Jump to content
BrainDen.com - Brain Teasers
  • 0


Guest
 Share

Question

In this long multiplication problem, each base ten digit from 0 to 9 appears exactly two times. Decode this multiplication, where none of the numbers can contain any leading zero.

       x x x
x x x
---------
x x x
x x x
x x x
-------------
x x x x x[/codebox]

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Ok, I've spent way too long on this, when I "should" be studying for exams *sigh*

This is what I've got so far. Only read the spoiler if you want some hints:

	   x x a

	   x x b

	 ---------

	   x x c

	 x x x

   x x x

-------------

   d x x x c

The most obvious one is about "c": The two digits marked as a "c" are the same digit, which automatically excludes whatever digit it happens to be from the list of available digits (this can be helpful if you know that one digit is ALWAYS emitted from the list, ie. you cannot use all 10 digits in certain logical processes).

Neither "a" nor "b" can be 1: If a=1, then b*1=b, and thus c=b, which results in 3 "b" digits, which is not allowed (and of course the same with b=1).

When multiplying "a" with "b", the last digit of that multiplication is "c". This automatically excludes 5 from being "c", as no multiplication results in the last number being a 5. (this also may be a helpful property, later, I'm not sure)

PROOF: 5=5*1 but "a" and "b" cannot be 5 in this logical process, as it would result in 3 of the digit "5"; 15=5*3 which has the same result as before; 25=5*5 which has the same problem; 35=5*7 same again; 45=5*3*3=15*3 but 15 isn't a single decimal digit; etc.; and since we can't get rid of these 5's in each case, due to the fact that 3 is the lowest prime factor that can ever multiply to get rid of the digit 5, which results in 15, which isn't a digit from 0 to 9... We cannot get a satisfactory result that allows "c" to be the digit 5. (QED)

Out of the two multipliers, the lowest number that can be used is 102: 100 would result in the answer also ending in 2 zeros, which mean there is too many zeros (4 in total). 101 breaks the rule that neither "a" nor "b" can be 1. Since 102*298=30396, it can be seen that 102 "may" be a multiplier that can be used.

The numbers in the bottom multiplier (2nd row down) dictate what number the top multiplier (1st row) can be: (see list below)

If a 9 is present in the bottom multiplier, the top multiplier number can only be numbers in the range 102 to 108.

If an 8 is present, the range is 102 to 124.

7 --> 102 to 142

6 --> 102 to 165

5 --> 102 to 197

4 --> 102 to 248

3 --> 102 to 329

2 --> 102 to 494

1 --> 102 to 987

(I wont explain each one, they are all 1000/digit to find the last number that "ticks" the multiplication over to 4 digits, instead of the required 3, and then worked back, using only the fact that digits can only be used twice). This result shows that a large digit in the bottom multiplier severely shortens the possible range the top multiplier can be.

No zero can be present in the bottom multiplier: It will result in a row of zeros, which is not allowed.

Of course, none of the left most digits can be zero (since the problem states that there is to be no leading zeros).

This last one should be ignored, since I pretty much used a logical process, that might not of been correct if I missed something (but I think it is correct): The lowest result achievable is in the calculation 126*159=20034. This shows that the digit shown as a "d", cannot be the digit 1.

I hope these random logical facts I've found help someone find the answer... I would of loved to of done it myself... But I need to concentrate on exams... And stop procrastinating :(

God speed,

random7

PS. to the OP: Is there only one answer? And are you very sure of the number of answers?

Link to comment
Share on other sites

  • 0
PS. to the OP: Is there only one answer? And are you very sure of the number of answers?

I got this problem from an impeccable source where it was demonstrated by computer program aided methods, that the solution is unique.

Edited by K Sengupta
Link to comment
Share on other sites

  • 0

if u dont mind can u check my work so far for me so i dont waste my hole life

i lettered the * in alpha order so it is abc*def==ghi+jkl(with a zero)+mno(two zeros)=pqrst

a<4

b?

c not 0,1,5

d not 0,1,5,9

e not 0,1,5,9

f not 0,1,5,9

g not 9

h not s

i not 0 5 and equal to t

j?

k?

l not 0 or 5 or s

m p or p-1

n?

o not 0 5 or 9

p?

q?

r?

s?

t not 5 and equal to i

thanks

Link to comment
Share on other sites

  • 0
OK all you programmers, do the exhaustive search now. ;)

You asked me to do it:

I wrote some code to solve this one...and the only answer that works is this...


224
--------
716
358
358
--------
40096
     179

Sorry for anyone that has spent a lot of time on trying to solve this manually...but this only took about 3 minutes to write the code for and get the answer :c) Probably not the most efficient code in the world, but I went with the quick and dirty method...here's the code (Java) in case you are wondering:


for (int i = 100; i < 1000; i++) {
for (int j = 100; j < 1000; j++) {
int twoOnes = Integer.parseInt(new Integer(j).toString().substring(2));
int twoTens = Integer.parseInt(new Integer(j).toString().substring(1, 2));
int twoHuns = Integer.parseInt(new Integer(j).toString().substring(0, 1));
boolean validValue = true;
if (i * j >= 10000 && i * j < 100000) {
if (twoOnes * i > 100 && twoOnes * i < 1000) {
if (twoTens * i > 100 && twoTens * i < 1000) {
if (twoHuns * i > 100 && twoHuns * i < 1000) {
String s = "" + i + j + (twoOnes * i) + (twoTens * i) + (twoHuns * i) + (i * j);
int[] counts = new int[10];
for (int k = 0; k < s.length(); k++) {
int val = Integer.parseInt("" + s.charAt(k));
counts[val]++;
}
for (int k = 0; k < counts.length; k++) {
if (counts[k] != 2) {
validValue = false;
break;
}
}
} else {
validValue = false;
}
} else {
validValue = false;
}
} else {
validValue = false;
}
} else {
validValue = false;
}
if (validValue) {
System.out.println(" " + i);
System.out.println(" " + j);
System.out.println("--------");
System.out.println(" " + (twoOnes * i));
System.out.println(" " + (twoTens * i) + " ");
System.out.println(" " + (twoHuns * i) + " ");
System.out.println("--------");
System.out.println(" " + (i * j));
System.out.println();
}
}
}
}
public static void main(final String[] args) throws Exception {

Link to comment
Share on other sites

  • 0

using the same notational scheme as final, what i have so far is:

since a*d, a*e and a*f must all be <10, a = 2, 3 (intuitively i feel that it is 2) and d, e, f = 2, 3 or 4. i !=(cannot equal) a..f, 0, 1 or 2.

If you have anything to add or thing i am wrong, please let me know!

Link to comment
Share on other sites

  • 0
You asked me to do it:

I wrote some code to solve this one...and the only answer that works is this...


224
--------
716
358
358
--------
40096
     179

Sorry for anyone that has spent a lot of time on trying to solve this manually...but this only took about 3 minutes to write the code for and get the answer :c) Probably not the most efficient code in the world, but I went with the quick and dirty method...here's the code (Java) in case you are wondering:


for (int i = 100; i < 1000; i++) {
for (int j = 100; j < 1000; j++) {
int twoOnes = Integer.parseInt(new Integer(j).toString().substring(2));
int twoTens = Integer.parseInt(new Integer(j).toString().substring(1, 2));
int twoHuns = Integer.parseInt(new Integer(j).toString().substring(0, 1));
boolean validValue = true;
if (i * j >= 10000 && i * j < 100000) {
if (twoOnes * i > 100 && twoOnes * i < 1000) {
if (twoTens * i > 100 && twoTens * i < 1000) {
if (twoHuns * i > 100 && twoHuns * i < 1000) {
String s = "" + i + j + (twoOnes * i) + (twoTens * i) + (twoHuns * i) + (i * j);
int[] counts = new int[10];
for (int k = 0; k < s.length(); k++) {
int val = Integer.parseInt("" + s.charAt(k));
counts[val]++;
}
for (int k = 0; k < counts.length; k++) {
if (counts[k] != 2) {
validValue = false;
break;
}
}
} else {
validValue = false;
}
} else {
validValue = false;
}
} else {
validValue = false;
}
} else {
validValue = false;
}
if (validValue) {
System.out.println(" " + i);
System.out.println(" " + j);
System.out.println("--------");
System.out.println(" " + (twoOnes * i));
System.out.println(" " + (twoTens * i) + " ");
System.out.println(" " + (twoHuns * i) + " ");
System.out.println("--------");
System.out.println(" " + (i * j));
System.out.println();
}
}
}
}
public static void main(final String[] args) throws Exception {

Well done, Pickett !!!!

Not being a programmer myself, I cannot judge the methodology, but the answer is indeed correct.

Looking at random7's method in the partial solution, it looks like an analytic solution to this problem would be very lengthy.

Edited by K Sengupta
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...