找递推关系+素数筛、欧拉筛等筛及其变形 lightoj1197;2018ICPC南京网络赛J题;UVA11426

help henzo

这道题要找(a,b)之间素数的个数,典型的素数筛,但是数据范围到2^{32},显然无法直接筛

只用(0,2^{16})的素数去筛(a,b)这个范围

首先要获得(0,2^{16})的素数,其次要获得prime[j]第一个≥a的整数倍,及ceil(a/prime[j])*prime[j]

关于向上取整有个小技巧 (a+prime[j]-1)/prime[j]

标记(a,b)是否为素数时,以a为数组起点记录信息

注意中间过程不要溢出

要注意的一个wa 点是用interval数组存时,若a==1,没有素数能够更新到1,因此答案会多以

Sum

这题要找把一个数分解成两个square-free数的方法种数。规律已经找到了,做题的时候采用暴力的策略,每个数跑完所有它能分解的素数,如果有一个幂次为3,答案为0,有一个幂次为2,不修改,幂次为1则答案乘2。 完美地TLE了

没有想到提取出一个数的最小素因子,然后写个递推式

UVA 11426 extreme GCD(II)

写递推关系,将问题转化至求f(n)=gcd(1,n)+gcd(2,n)+gcd(3,n)+\cdots+gcd(n-1,n)

gcd(x,n)=i\Rightarrow gcd(x/i,n/i)=1 说明最大公约数为i的有\phi(n/i)个,所以f(n)=\sum i\phi(n/i),其中i能整除n

正向思考的话是遍历小于n的所有数,如果是n的因数就去更新一下f(n)。 这里就可以用筛优化!

我觉得思想是一样一样的

for(int i=1;i<=N;++i)
    for(int j=2*i;j<=N;++j)
    f[j]+=i*euler[j/i];

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值