1370C Number Game

本文探讨了一种双人游戏的策略,其中玩家可以对给定数字执行除以奇数或减1的操作。关键在于分析数字n对2的除法次数和奇数因子。当n能被多次除以2且最后结果大于2时,或者n无法被2整除时,A玩家有获胜策略。如果n仅能被2除一次,且奇数因子乘积大于等于9,A也能获胜。通过对数字的奇数因子分析,可以确定游戏的胜负走向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://codeforces.com/problemset/problem/1370/C

题目:两个进行游戏,给定一个数字n,可以进行两种操作:
1、n 除以一个奇数,n可以除尽该奇数,而且该奇数需要大于1
2、n减去1,n需要大于1
如果谁不能再进行任何操作了,则对方获胜。

思路:
如果n可以除尽2的次数大于1次且最后的n大于2,那么代表该n含有一个以上奇数因子,A只要除以这些奇数因子的乘积就可以得到一个2的num次方数,这种数只能进行减1操作,而减1之后,A再进行一次除以自身的操作,就可以获胜,
如果n不能除以2,那么A只要进行一次除以自身的操作就可以获胜
如果n可以除尽2的次数等于1次,剩余的n如果含有的所有奇数因子的乘积大于等于9,那么就代表A可以对此进行一次除以这些奇数因子而剩余一个3因子的操作,那么无论B进行除以3,还是进行减1的操作,A都是赢。

for _ in range(int(input())):
    n = int(input())
    num = 0
    while n % 2 == 0:
        n //= 2
        num += 1
    if num == 1:
        ans = n > 1
        for j in range(3, int(n**.5)+1, 2):
            if n % j < 1:
                ans = 0;break
        print('Ashishgup' if not ans else 'FastestFinger')
    else:
        print('FastestFinger' if n<2 else 'Ashishgup')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值