银行 bank
Description
亿万光年外的艾泽拉斯大陆战事不断,被战火划分为了100000100000个领地,每个领地都有一个编号,分别为11到100000100000。在每个领地都有一个银行。商人工会在这100000100000个领地的银行开户时都存了33块大洋,为了保证工会资产的安全,工会将不时地派人手去清点存款或者改变存款。而艾泽拉斯大陆的求和运算相当于地球的乘法运算。即开户时存款总额其实为3^{100000}3100000。
在艾泽拉斯大陆,货币面额有6060种,恰为最小的前6060个素数。所有人的存款都可以由这6060个面额表示。(所有的资产面额都只能由这60个基本面额表示,即设当前的资产为正整数M,则。M=p_1^{k_1}p_2 ^ {k_2}……p_{60}^{K_{60}}M=p1k1p2k2……p60K60。
工会有时会派人手对第aa个领地的银行到第bb个领地的银行,即编号在[a,b][a,b]内的领地银行进行资产清点:先对这些资产做乘法运算,然后求解此结果的欧拉函数值。有时,工会也会拍人手到某个银行改变存款。现在请你对工会的每个清点操作求出区间内资产求积之后的欧拉函数值。
Input
第一行一个整数nn表示操作的总次数。
接下来nn行,每行3个整数ai,bi,ciai,bi,ci。
aiai为00时表示此次操作是清点,工会要求清点bibi到cici的存款,你需要对该操作求解出答案。
aiai为11时表示该操作是改变存款,把银行bibi的存款改为cici,不需输出结果。
Output
输出若干行,每行一个数,表示对应答案。
Sample Input 1
6 0 1 3 1 1 5 0 1 3 1 1 7 0 1 3 0 2 3
Sample Output 1
18 24 36 6
Hint
x≤100000,当ai=0时0≤ci−bi≤100000x≤100000,当ai=0时0≤ci−bi≤100000
Reference Answer
def main():
N = int(input())
bank = [3] * 10 ** 5
for i in range(N):
a, b, c = input().split(' ')
a = int(a)
b = int(b)
c = int(c)
if a == 0:
ans = 1
for i in range(b, c + 1):
ans *= bank[i]
print(Oula(ans))
elif a == 1:
bank[b] = c
def Oula(N):
if (0).__class__ is N.__class__:
if N > 0:
F = 0
for I in range(N):
X, Y = N, I
while Y != 0:
X, Y = Y, X % Y
if X == 1:
F += 1
return F
if __name__ == "__main__":
main()