AcWing 871. 871.约数之和:奶酪宝宝来啦!AC代码,注意longlong多个变量不能错类型,否则卡大数据溢出!
原题链接
简单
作者:
奶酪宝宝
,
2025-03-26 18:37:29
·山东
,
所有人可见
,
阅读 1
#include <iostream>
#include <unordered_map>
#include <unordered_map>
#define DEGENERATE_BOUNDARY 2
#define NO_REMAINDER 0
using namespace std;
const int mod = 1e9 + 7;
int numberCount;
void declaration(){
scanf("%d", &numberCount);
}
int numberToCalculate;
void inputSingleNumber(){
scanf("%d", &numberToCalculate);
}
unordered_map<int, int> primeToCount;
void eachNumberCalculation(int numberToCalculate){
for(int primeCandidate = DEGENERATE_BOUNDARY; primeCandidate <= numberToCalculate / primeCandidate; primeCandidate ++){
while(numberToCalculate % primeCandidate == NO_REMAINDER){
primeToCount[primeCandidate] ++;
numberToCalculate /= primeCandidate;
}
}
if(numberToCalculate > 1) primeToCount[numberToCalculate] ++;
}
void calculationIterate(){
while(numberCount --){
inputSingleNumber();
eachNumberCalculation(numberToCalculate);
}
}
long long totalSum = 1;
void outputSolution(){
for(auto primeFactorPair : primeToCount){
long long polynomialFactor = 1;
long long primeFactorPower = 1;
int primeFactor = primeFactorPair.first;
int primeFactorExponent = primeFactorPair.second;
while(primeFactorExponent --){
primeFactorPower = primeFactorPower * primeFactor % mod;
polynomialFactor = (polynomialFactor + primeFactorPower) % mod;
}
totalSum = totalSum * polynomialFactor % mod;
}
printf("%d", totalSum);
}
int main(){
declaration();
calculationIterate();
outputSolution();
return 0;
}