在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 a
number 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