If f(x)=1x, f(f(x))=x. Can you provide another such f(x), other than the obvious f(x)=x or f(x)=x?
Can you find a real function g(x) such that g(g(x))=x? Note that if we allowed complex numbers, g(x)=ix would do the job.
Can you find another real function h(x) so for x≠0, h(h(x))=1/x?
In all cases, if you cannot find a solution that works for all x, a function valid for some ranges is better than nothing!
Part 1: f(x)=3x, or generally, f(x)=ax where a is a constant.
Part 2:
When g(x) is applied twice in succession, on one of those occasions it will have to reverse the sign and on another, not reverse the sign, so g(x) will sometimes have to result in an opposite sign from its argument, and at other times result in the same sign. This is true regardless of whether starting from positive or negative numbers.
Thus, a specific subset of the positive numbers must be set aside to result in negative numbers, and another subset to map to the first subset. A similar scheme must be made out for the negative numbers. Also the negative number subsets must work handinhand with the positive subsets, so that the subset of positive numbers that maps to negative numbers must map to the subset of negative numbers that maps to other negative numbers.
Let's temporarily not worry about the endpoints of the intervals of numbers that make up the subsets, where the function will become discontinuous. Let's arbitrarily take the interval from zero to 1 as that which will map to the interval 1 to 2, which will map to negative numbers, specifically zero to 1. The next available interval is 2 to 3; let it map to the interval from 3 to 4. That in turn will have to map into 2 to 3. Then continue on in this fashion. It's best to make a graph of the function as we go along.
Now, if we map the interval 1 to 2 into zero to 1, it follows that zero to 1 must map into 1 to 2, to satisfy the requirements of the puzzle. Likewise, if we map the interval 3 to 4 into 2 to 3, then 2 to 3 must map into 3 to 4, etc.
Now since zero to 1 maps into 1 to 2, the latter must map into zero to 1. This is fine, as that in turn maps into 1 to 2just what we want as it came from 1 to 2. Similarly, the cycle 2 to 3, 3 to 4, 2 to 3, 3 to 4 checks out.
On a graph, this function looks like a pinwheel, with spokes broken into on and off segments of equal length.
We haven't yet considered the endpoints of the interval, glossing over the fact that the endpoints have been mentioned in two intervals each. Zero cannot map into a nonzero number because no nonzero number can ever map back into zero. So zero has to map into zero; and this satisfies the requirements as it will stay zero into the next generation also.
So consider x=1. If it's considered part of 1 to 2 and maps into zero, it will be lost and never get to 1 nor ever get back to 1 in the 4cycle. So make it part of the zero to 1 interval; that is, make it (0,1], a semiclosed interval. Then 1 maps into 2, then 2 into 1, then 1 into 2 and 2 into 1 to close the cycle.
So the integers should be considered as the end of each interval that is highest in absolute value:
... [6,5), [4,3), [2,1) map into x  1
... [5,4), [3,2), [1,0) map into x  1
0 maps into 0
(0,1], (2,3], (4,5], ... map into x + 1
(1,2], (3,4], (5,6], ... map into 1  x
the square bracket indicating that end is inclusive.
Part 3:
If we take the logarithm of the number, apply g and take the antilog of the result, we will get the desired result, as negating the logarithm is taking the reciprocal of the number.
However, negative numbers do not have real logarithms. So take the absolute value of the number before taking the logarithm; then, after g is applied and e raised to the power (the antilog taken), make the result the same sign as the original number, as the antilog will always be positive anyway, so the sign is available to encode the sign of the original number.
h(x) = sgn(x) * e^(g(ln(abs(x))))
Here's a program that tests these ideas:
DECLARE FUNCTION ceil! (x!)
DECLARE FUNCTION h! (x!)
DECLARE FUNCTION g! (x!)
RANDOMIZE TIMER
CLS
samples = 20
DIM rnum(samples)
FOR i = 1 TO samples
r = RND(1) * 60  30
rnum(i) = r
NEXT
DO
flag = 0
FOR i = 1 TO samples  1
IF rnum(i + 1) < rnum(i) THEN SWAP rnum(i), rnum(i + 1): flag = 1
NEXT
LOOP UNTIL flag = 0
FOR i = 1 TO samples  1
g1 = g(rnum(i))
g2 = g(g1)
PRINT rnum(i), g1, g2
NEXT
FOR i = 3 TO 3
PRINT i, g(i), g(g(i))
NEXT
PRINT
FOR i = 1 TO samples  1
h1 = h(rnum(i))
h2 = h(h1)
PRINT rnum(i); TAB(20); h1; TAB(40); h2; TAB(60); 1 / h2
NEXT
FUNCTION ceil (x)
ceil = INT(x)
END FUNCTION
FUNCTION g (x)
segment = ceil(ABS(x))
IF segment MOD 2 = 1 THEN
IF x > 0 THEN
g = x + 1
ELSE
g = x  1
END IF
ELSE
IF x > 0 THEN
g = 1  x
ELSEIF x < 0 THEN
g = x  1
ELSE
g = 0
END IF
END IF
END FUNCTION
FUNCTION h (x)
h = SGN(x) * EXP(g(LOG(ABS(x))))
END FUNCTION
Here's a sample output:
28.02582 29.02582 28.02582
26.96076 27.96076 26.96076
15.64493 14.64493 15.64493
15.43939 14.43939 15.43939
12.68054 13.68054 12.68054
12.64378 13.64378 12.64378
10.49975 11.49975 10.49975
10.47616 11.47616 10.47616
10.00988 11.00988 10.00988
7.821289 6.821289 7.821289
6.496117 7.496117 6.496117
5.013628 4.013628 5.013628
3.297944 2.297944 3.297944
2.685821 3.685821 2.685821
3.028032 2.028032 3.028032
4.313746 5.313746 4.313746
5.371442 4.371442 5.371442
9.06912 8.06912 9.06912
23.25927 22.25927 23.25927
3 4 3
2 1 2
1 2 1
0 0 0
1 2 1
2 1 2
3 4 3
28.02582 9.699205E02 3.568138E02 28.02582
26.96076 .1008236 3.709094E02 26.96076
15.64493 42.52734 6.391846E02 15.64493
15.43939 41.9686 6.476942E02 15.43939
12.68054 34.46929 7.886097E02 12.68054
12.64378 34.36936 7.909027E02 12.64378
10.49975 28.54127 9.524041E02 10.49975
10.47616 28.47716 9.545482E02 10.47616
10.00988 27.20968 9.990127E02 10.00988
7.821289 21.26047 .1278562 7.82129
6.496117 .4184472 .1539381 6.496117
5.013628 .5421786 .1994563 5.013628
3.297944 .8242353 .3032192 3.297944
2.685821 7.300818 .3723256 2.685821
3.028032 .8977059 .3302476 3.028032
4.313746 .6301441 .2318171 4.313746
5.371442 .5060619 .1861698 5.371442
9.06912 24.65242 .1102643 9.06912
23.25927 .1168687 .0429936 23.25928
The first section shows x, g(x) and g(g(x)), first for a set of random values sorted lowest to highest, and then for integers 3 to 3. Both result in g(g(x)) being the negation of x.
The last section shows x, h(x), h(h(x)) and 1/h(h(x)), showing the last column as being the same as the first.

Posted by Charlie
on 20050202 19:38:43 