首页 > 其他分享 >SP12304

SP12304

时间:2023-11-15 19:46:51浏览次数:33  
标签:满足条件 int sum SP12304 long 因子 Suum

题目传送门

简述题目:

题目要求找出满足条件 \(σ(i) = n\) 的最小整数 \(i\),其中 \(σ(i)\) 表示 \(i\) 的所有正因子的和。

解题思路:

  • 首先定义一个函数 \(Suum(i)\),用于计算 \(i\) 的所有正因子的和。在函数内部,使用一个循环遍历 \(i\) 的所有可能因子。对于每一个因子 \(i\),如果 \(i\) 能够整除 \(n\),那么将 \(i\) 加到用来存储的 \(sum\) 上,并将 \(n\) 除以 \(i\) 得到的商加到 \(sum\) 上。注意:除数和被除数不能相同
  • 接下来定义一个函数 \(minsum(n)\),用于找到满足条件的最小整数 \(i\)。初始化 \(i\) 为 \(1\),然后进行如下步骤:
  1. 检查 \(Suum(i)\) 是否等于 \(n\),如果相等,则返回当前的 \(i\)。
  2. 如果 \(i\) 大于 \(n\),说明没有满足条件的 \(i\),跳出循环。
  3. 否则,\(i\) 自增 \(1\),继续下一轮循环。

主要知识:

这个题目主要用到了数学知识中的因子和的概念,以及循环条件语句的使用。

Code:

#include <iostream>
using namespace std;

int Suum(long long n) {
    long long sum = 0;
    for (int i = 1; i * i <= n; i++) {
        if (n % i == 0) {
            sum += i;
            if (i != (n/i)) {
                sum += (n/i);
            }
        }
    }
    return sum;
}

int minsum(long long n) {
    long long i = 1;
    while (true) {
        if (Suum(i) == n) {
            return i;
        }
        if (i > n) {
            break;
        }
        i++;
    }
    return -1;
}

int main() {
    int T;
    cin >> T;
    
    while (T--) {
        long long n;
        cin >> n;
        
        long long ans = minsum(n);
        cout << ans << endl;
    }
    
    return 0;
}

标签:满足条件,int,sum,SP12304,long,因子,Suum
From: https://www.cnblogs.com/To-Carpe-Diem/p/17834608.html

相关文章

  • SP12304 题解
    原题链接|题解链接本篇题解为此题最较简单做法及最较少码量,并且码风优良,请放心阅读。题目简述当\(i\)的所有正因数和\(=\)\(n\)时,其中\(i\)的最小值。思路首先需要完成求一个数的所有正因数之和的函数\(f(n)\)。要求此函数可返回传入参数的所有正因数之和,那么......