The argument is really intuitive.

If you get the right to buy 1 Euro by only K dollars, it is equivalent to K times the right to sell 1 dollar for 1/K euro.

Thus their current value shall be the same

Call(So, K) USD = K Put (1/So, 1/K) EUR = KSo Put(1/So, 1/K) USD

Call(So, K)= KSo Put(1/So, 1/K)

But note 1/S follows a different Brownian motion than S,

1/St=1/So exp{-(r-ss/2)t - sWt}

Use Bt=-Wt and it is the same as that of St except for the starting value 1/So and drift -r

A simpler way is to add special property of r=0

aPut(S,K)=Put(aS,aK) and a=SK

Call(S,K)=Put(K,S) (r=0)

This formula is easy to use since normally the derivative of S is also the derivative of discounted S, who has no drift.

And the symmetry works for American Options as well!

I wonder if they use this formula to price American Puts!