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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP