- 注册时间
- 2008-1-29
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 5353
- 在线时间
- 小时
|
发表于 2014-6-27 21:45:23
|
显示全部楼层
本帖最后由 282842712474 于 2014-6-28 00:33 编辑
终于做出来了。$f(10^{12})=5435004633092$,用时101秒!
稍后会整理代码出来。
=========================
http://spaces.ac.cn/index.php/archives/2665/
- import time
- start=time.clock()
- import math
- #主要计算函数(最后一个求和号)
- def psi(x, y1, y2):
- s=0
- rx=int(math.sqrt(x))
- if y2<= rx:
- for d in xrange(y1, y2+1):
- s=s+x//d
-
- elif y1<=rx:
- for d in xrange(y1, rx+1):
- s=s+x//d
- p=x//rx-1
- q=x//y2
- d=0
- q1=x//(p-d+1)
- while d < p-q:
- q2=q1
- q1=x//(p-d)
- s=s+(q1-q2)*(p-d)
- d=d+1
- s=s+(y2-x//(q+1))*q
-
- else:
- p=x//y1-1
- q=x//y2
- if p<q:
- s=(1+y2-y1)*q
- else:
- d=0
- q1=x//(p-d+1)
- while d < p-q:
- q2=q1
- q1=x//(p-d)
- s=s+(q1-q2)*(p-d)
- d=d+1
- s=s+(y2-x//(q+1))*q
- s=s+(x//(p+1)-y1+1)*(p+1)
- return s
- #生成一个素数表的莫比乌斯表
- def mobi(p):
- length = len(p)
- mu=[1,-p[0]]
- for i in xrange(1,length):
- mu2=mu[:]
- for j in mu2:
- mu.append(-1*j*p[i])
- return mu
- #开始
- l=1000000000000 #上限
- s=0 #统计个数
- rl=int(math.sqrt(l))
- rrl=int(math.sqrt(int(math.sqrt(l))))
- #生成rl内的素数表
- prime=[i for i in range(1,rl+1)]#定义整数表
- j=2
- while j<=rrl:
- if prime[j-1] != 0:
- m=int(rl/j)
- for i in range(j,m+1):
- prime[i*j-1]=0
- j=j+1
- else:
- j=j+1
- prime.sort() #从小到大重新排列(让0位于前面)
- z=prime.count(0) #统计0的个数
- prime=prime[z+1:rl]
- #素数表生成完毕
- prime.append(rl) #往素数表里边添加一个大数,避免溢出错误
- for n in xrange(2,rl+1):
- p=[] #n的素因子表
- mu=[] #莫比乌斯表
- nn=n
- i=0
- rn=int(math.sqrt(n))
- #开始生成n的素因子表
- while prime[i] <= rn:
- if n%prime[i]==0:
- n=n//prime[i]
- if n%prime[i] != 0:
- p.append(prime[i])
- i=i+1
- else:i=i+1
- #下面这句的意思是,如果n的一个因子不能被前面的素数整除,那么这个因子就是素数。
- if n>rn:
- p.append(n)
- #n的素因子表p生成完毕
- mu=mobi(p) #生成莫比乌斯表
- for d in mu:
- ll=l//(nn*abs(d))
- s=s+d//abs(d)*(psi(ll,nn//abs(d)+1,(2*nn-1)//abs(d)))
- print(s)
- end=time.clock()
- print(end-start)
复制代码 |
评分
-
参与人数 1 | 威望 +6 |
金币 +6 |
贡献 +6 |
经验 +6 |
鲜花 +6 |
收起
理由
|
wayne
| + 6 |
+ 6 |
+ 6 |
+ 6 |
+ 6 |
最先给出结果,赞一个先,回头有时间了我看. |
查看全部评分
|