给出 个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字 ,我们认为 的价值是 的不同质因子数量。 现在需要计算的是:在所有选择数字的方案中,得到的所有 的价值之和。 由于结果可能很大,所以你只需要输出答案对 取模之后的结果。
区块链毕设网qklbishe.com为您提供问题的解答
给出 个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字 ,我们认为 的价值是 的不同质因子数量。
现在需要计算的是:在所有选择数字的方案中,得到的所有 的价值之和。
由于结果可能很大,所以你只需要输出答案对 取模之后的结果。
#include <iostream> #include<vector> #include <unordered_map> using namespace std; #define mod 1000000007; vector<int> prime_number(int num) { vector<int> prime; for (int i = 2; i * i <= num && num > 1; i++) { if (num % i == 0) { prime.push_back(i); while (num % i == 0) { num /= i; } } } if (num != 1) prime.push_back(num); return prime; } long power(long num, long n) { if (n == 0L) { return 1L; } long ans = 1L; while (n > 0) { if ((n & 1) != 0) { ans = (ans*num)%mod; } num = (num*num)%mod; n >>= 1; } return ans; } int main() { int n, number; long ans = 0; unordered_map<int, long> value; cin >> n; for (int t = 0; t < n; t++) { cin >> number; vector<int> prime = prime_number(number); for (int i = 0; i < prime.size(); i++) { if (value.find(prime[i]) == value.end()) value[prime[i]] = 1; else value[prime[i]] += 1; } } for (auto it = value.begin(); it != value.end(); it++) { long t = it->second; long other = n - t; long a = power(2, t) - 1, b = power(2, other); ans = (ans+ a * b) % mod; } cout << ans << endl; }
07:19
以上就是关于问题给出 个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字 ,我们认为 的价值是 的不同质因子数量。
现在需要计算的是:在所有选择数字的方案中,得到的所有 的价值之和。
由于结果可能很大,所以你只需要输出答案对 取模之后的结果。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训