NC23047 华华给月月出题
题目
题目描述
华华刚刚帮月月完成了作业。为了展示自己的学习水平之高超,华华还给月月出了一道类似的题:
符号表示异或和,详见样例解释。
虽然月月写了个程序暴力的算出了答案,但是为了确保自己的答案没有错,希望你写个程序帮她验证一下。
输入描述
输入一个正整数N。
输出描述
输出答案Ans。
示例1
输入
3
输出
18
说明
N=3时, , , ,异或和为18。
示例2
输入
2005117
输出
863466972
备注
题解
知识点:筛法。
设 ,那么对于任意两个数 有 ,因此 是完全积性函数,可以用线性筛线性求出。
时间复杂度
空间复杂度
代码
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 1.3e7 + 7; const int P = 1e9 + 7; int qpow(int a, ll k) { int ans = 1; while (k) { if (k & 1) ans = 1LL * ans * a % P; k >>= 1; a = 1LL * a * a % P; } return ans; } bool vis[N]; vector<int> prime; int f[N]; int get_prime(int n) { f[1] = 1; int ans = 1; for (int i = 2;i <= n;i++) { if (!vis[i]) { prime.push_back(i); f[i] = qpow(i, n); } for (auto j : prime) { if (i * j > n)break; vis[i * j] = 1; f[i * j] = 1LL * f[j] * f[i] % P;//完全积性函数 if (!(i % j)) break; } ans ^= f[i]; } return ans; } int main() { std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); int n; cin >> n; cout << get_prime(n) << '\n'; return 0; }
本文来自博客园,作者:空白菌,转载请注明原文链接:https://www.cnblogs.com/BlankYang/p/17658272.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧