C语言分解质因数问题

img


请问谁能帮我看看代码哪里有问题

img

//凑字数346755(uhvdvkygvd)

统计n有多少个质因数,判断是偶数个数还是奇数个数
你用倒序判断是不对的。加入对4求余为0,那4并不是质数

#include <stdio.h>
int main()
{
    int n,count=0,m=2;
    scanf("%d",&n);
    while(n>1)
    {
         if(n%m==0)
         {
              count++;
              n = n/m;
         }
         else
              m++;
    }
    if(count%2==0)
        printf("Alice");
    else
        printf("Bob");
}

什么最优策略都是骗人的
一个数的质因数数量是固定的
比如4,它只有2个质因数2,2,没有其他组合
那么题目其实就是给定一堆棋子,两人只能轮流拿一个,谁最后拿没了谁赢
那么其实你只需要判断质因数个数而已
-=-=-=
那么首先,要分解质因数,你至少需要双重for循环,你只写了一重循环是无法完成任务的,比如已经分解出一个2,那么2还可能依然是它的因数,你需要继续从2开始判断,你这样遍历那么只能找不同的因数,同样的因数就会忽略;
而且你从大到小分解是要闹哪样呢,从小到大分解才对
这样你不需要判断因数是否是质数,因为如果4是一个因数,循环到2的时候2必然也是它的因数,就分解掉了

质因数分解先,看看有多少质因数,根据质因数个数进行判断。你那个除法,你咋知道那i都不一定是质数