在C ++中查询所有数字的所有因数的奇数位和
在此程序中,我们给了Q个查询,每个查询都有一个正整数N。我们的任务是创建一个程序,以解决C ++中所有数字因数的奇数位和之和的查询。
问题描述-要解决每个查询,我们需要找到数字N的所有因子。然后将所有数字总和为奇数的因子相加。并返回每个查询的最终总和。
让我们举个例子来了解这个问题,
输入值
Q = 2, queries = {15, 8}
输出结果
8 1
说明
对于查询1:N = 15,因子15为1、3、5、15。
因数中的奇数和是1 + 3 + 5 = 8
对于查询2:N = 8,因数8为1、2、4、8。
因数中的奇数之和是1 = 1
解决方法
为了解决这个问题,我们需要对所有数字的奇数位求和。从中我们将计算因子,然后将其添加为结果。为了使这个数字处理总和,我们可以使用预先计算的值。例如,数字41的总和可以作为4的奇数位+ 3的奇数位之和找到。
创建oddDigitSum数组后,我们将找到可以除以给定数字的所有数字。然后,我们将使用oddDigitSum数组添加所有奇数位。
该程序说明了我们解决方案的工作原理,
示例
#include <iostream>using namespace std;
#define N 99999
void calcOddDigitSum(int oddDigitSum[]) {
for (int i = 1; i < N; i++)
oddDigitSum[i] = oddDigitSum[i / 10] + (i & 1) * (i % 10);
}
void findFactorSum(int oddDigitSum[], int factorSum[]) {
for (int i = 1; i < N; i++)
for (int j = i; j < N; j += i)
factorSum[j] += oddDigitSum[i];
}
int main(){
int Q = 3;
int query[] = { 5, 154, 98 };
int oddDigitSum[N];
int factorSum[N];
calcOddDigitSum(oddDigitSum);
findFactorSum(oddDigitSum, factorSum);
for (int i = 0; i < Q; i++)
cout<<"For query "<<(i+1)<<": The sum of odd number digit sums of all the factors of a number is "<<factorSum[query[i]]<<endl;
return 0;
}
输出结果
For query 1: The sum of odd number digit sums of all the factors of anumber is 6
For query 2: The sum of odd number digit sums of all the factors of a
number is 31
For query 3: The sum of odd number digit sums of all the factors of a
number is 27
以上是 在C ++中查询所有数字的所有因数的奇数位和 的全部内容, 来源链接: utcz.com/z/331525.html