Python实现基础数学的解法之进位问题验证
例题:我们用S(n)表示正整数n的各位数字之和,有一个正整数a使得S(a),S(a+1)的最大公约数是一个奇素数,求最小的a. 解:设a=c1c2 … ct99…9(k个9) k>=0 0<=ct<9 则a+1=c1c2 … ct-1(ct+1)00…0 所以 S(a)=c1+c2+ … +ct+9k S(a+1)=c1+c2+ … +ct+1 所以 S(a)=S(a+1)+9k-1 所以 d=(S(a),S(a+1))=(S(a),9k-1) =>d|9k-1 即求最小的a使d为奇素数,则k尽量小 若k=1 则d|8 d不存在 若k=2 则d|17 =>d 17 则 17|S(a+1)=c1+c2+ … +ct+1 => c1+c2+ … +ct>=16 =>a>=8899 若k>=3 则d|26 =>d=13 则13|S(a+1)=c1+c2+ … +ct+1 => c1+c2+ … +ct>=12 =>a>=48999 若k>=4 则a>=19999 综上所述 a最小值为8899 以下为验证a的最小值python编程:
st=[]
for l in range(3,18):
st.append(l)
for o in range(2,l):
if l%o==0 and l in st:
st.remove(l)
for i in range(0,10000):
a=0
b=0
x=len(str(i))
y=len(str(i+1))
for j in range(1,x+1):
a=i//10**(j-1)%10+a
for u in range(1,y+1):
b=(i+1)//10**(u-1)%10+b
g=1
for k in range(int(a),1,-1):
if a%k==0 and b%k==0:
g=k
if g in st:
print(i)
break
运行结果:



