## Cold War II Niall Ferguson on The Emerging Conflict With China

No introduction needed.

• We are in Cold War II;
• Could be much worse than Cold War I, economic wise and technology wise;
• Russo-Ukrainian War is the first hot war in Cold War II just like the Korean War is the first hot war in Cold War I;
• Stakes are high for both China and the US over Taiwan. Things could escalate very fast;
• The Chinese model is unappealing in 2 aspects: Innovation and Human Rights.

## In Between Karl Marx and Friedrich Hayek

Qin Hui has been my favorite scholar since many years ago. I think he is among the small group of Chinese contemporary scholars who are actually presentable on a global stage. Recently I had the chance to listen to his lecture series My View on Karl Marx. It was fascinating. I translated a small excerpt from the last episode into English, so my western friends can have glimpse of it.

Towards the end of the Q&A session, someone asked Mr. Qin:

## 80年代末的上海什么样子？

Clive James在上海生活了一个月，影片记录了当时普通人的衣食住行，也记录了今天不太为人知道的街头运动。至少从文案质量上看，今天的网红还是要跟着Clive学习一个。

《形而上学》亚里士多德

# 2.1 埃及乘法

\$\$1a=a\$\$                                   （2.1）

\$\$(n+1)a=na+a\$\$                 （2.2）

```int multiply0(int n, int a){
if (n==1) return a;
return multiply0(n-1, a)+a;
}```

Ahmes所描述的算法，这个算法在古希腊被称为“埃及乘法”，而很多现代作者则称之为“俄罗斯农民算法”，建立在如下洞察上：

\$\$ 4a=((a+a)+a)+a=(a+a)+(a+a) \$\$

\$\$a+(b+c)=(a+b)+c \$\$

1        ♦         59
2                  118
4                  236
8        ♦        472
16                944
32      ♦      1888

\$\$41*59=(1*59)+(8*59)+(32*59)\$\$

\$\$n=n/2+n/2\$\$    说明n是偶数
\$\$n=(n-1)/2+(n-1)/2+1\$\$  说明n是奇数

odd(n) 意味着 half(n)=half(n-1)

```int multiply1(int n, int a){
if (n==1) return a;
int result=multiply1(half(n), a+a);
if (odd(n)) result=result +a;
return result;
}```

odd(x)很容易实现，测试x的最低位就可以了，half(x)则可以通过对x进行一次右移实现：

```bool odd(int n) { return n&0x1;}
int half(int n) { return n>>1; }```

multiply1需要进行多少次加法运算？每次调用这个函数，我们需要在a+a的地方进行一次加法，因为我们是不断对n取半，我们需要调用这个函数logn次。在某些时候，我们还需要在result+a的地方进行加法运算，因此加法运算的总次数为：

\$\$\#(n)=logn + v(n)-1\$\$

\$\$\#(15)=3+4-1=6\$\$

```int multiply_by_15(int a){
int b=(a+a)+a;    //b == 3*a
int c+b+b;        //c == 6*a
return (c+c)+b;   //12*a + 3*a
}```

# 2.2 改进算法

`r+na`

```int mult_acc0{int r, int n, int a) {
if (n==1) return r+a;
if (odd(n)){
return mult_acc0(r+a, half(n), a+a);
}else{
return mult_acc0(r, half(n), a+a);
}
}```

```int mult_acc1(int r, int n, int a) {
if (n==1) return r+a;
if (odd(n)) r=r+a;
return mult_acc1(r, half(n), a+a);
}```

• n=1的情况很少发生；
• 如果n是偶数，则完全没有必要判断它还是不是1.

```int mult_acc2(int r, int n, int a) {
if (odd(n)) {
r=r+a;
if (n==1) return r;
}
return mult_acc2(r, half(n), a+a);
}```

```int mult_acc3 (int r, int n, int a) {
if (odd(n)) {
r=r+a;
if (n==1) return r;
}
n=half(n);
a=a+a;
return mult_acc3(r,n,a);
}```

```int mult_acc4(int r, int n, int a) {
while (true) {
if (odd(n)) {
r=r+a;
if (n==1) return r;
}
n=half(n);
a=a+a;
}
}```

```int multiply2(int n, int a) {
if (n==1) return a;
return mult_acc4(a, n-1, a);
}```

```int multiply3(int n, int a) {
while (!odd(n)) {
a=a+a;
n=half(n);
}
if (n==1) return a;
return mult_acc4(a, n-1, a);
}```

```int multiply4(int n, int a) {
while (!odd(n)) {
a=a+a;
n=half(n);
}
if (n==1) return n;
return mult_acc4(a, half(n-1), a+a);
}```