m0_50934066 2023-08-15 14:19 采纳率: 96.1%
浏览 4
已结题

孙悟空的金箍棒顽皮的孙悟空又大闹天宫了

孙悟空的金箍棒
描述

顽皮的悟空又在大闹天宫了,太上老君觉得悟空太闹腾了,于是让你去收掉悟空的作案工具金箍棒,太上老君给了你一个法宝,可以收掉悟空的金箍棒,但是有个限制,只能放下长度为质数时的金箍棒,例如长度时8,就放不下,但是将他缩短为2就可以放下,但是金箍棒不是你的法宝,你不能随意的变化,需要符合规则(即长度为l,x为l的因子,那么你可以变为l/x的长度,你可以做出任意次这样的操作,知道l为质数)。

例如:l=12,选择12的因子2,此时l=6,再选择6的因子2,此时结果为3,为质数。但是很明显,这个方案不一定是最优的。

day08-02.zip

输入
第一个一个整数T(0<T<1e5),表示数据组数

其后T行,每行一个整数l,表示金箍棒的长度(l<=1e6)

输出
T行,每行一个整数,表示最少的操作次数

输入样例 1

2
4
3
输出样例 1

1
0

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2023-08-15 14:32
    关注
    #include <iostream>
    #include <cmath>
    using namespace std; 
    bool isPrime(int n) {
        if (n <= 1) {
            return false;
        }
        for (int i = 2; i <= sqrt(n); i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
    
    int minCalc(int l) {
        if (isPrime(l)) {
            return 0;
        }
        for (int i = 2; i <= sqrt(l); i++) {
            if (l % i == 0) {
                return 1 + minCalc(l / i);
            }
        }
        return -1;
    }
    
    int main() {
        int T;
        cin >> T;
        for (int t = 0; t < T; t++) {
            int l;
            cin >> l;
            int min = minCalc(l);
            cout << min << endl;
        }
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月23日
  • 已采纳回答 8月15日
  • 创建了问题 8月15日