poj 2886 who get the most candies? 约瑟夫+反素数

本文详细介绍了如何解决POJ 2886问题,即在约瑟夫游戏中找到最后一个被踢出的人。关键在于理解反素数的概念,它是小于等于n的数中约数最多的数。文章提供了反素数的性质、计算方法以及利用线段树模拟游戏过程来求解原始序号。同时,还给出了相关参考资料链接以供深入学习。
摘要由CSDN通过智能技术生成

http://poj.org/problem?id=2886


一下内容来自http://magicode.blog.sohu.com/120450550.html (以表示对原作者尊重)

这个题主要用到线段树的思想,每次推算出要出去的人在当前剩下的人中的排位,再用线段树求出其原来的编号,即可算出每次应该出去的人,该人得到的糖果数为f(p)(p为出去的顺序,f(p)为p约数的个数

其实当总人数n确定时,p的值和f(p)的值就确定了,p为小于等于n的最大反素数

新学一个反素数的概念

反素数n,1<=i<n,则f(i)<f(n),即在1-n中,n的约数最多

由于反素数个数不多,这个题可以打表,把1-500000之间的反素数先算出来

反素数有以下两个性质

性质一:一个反素数的质因子必然是从2开始连续的质数.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值