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

更新於:2020年9月9日

130 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.