链接:https://ac.nowcoder.com/acm/contest/392/C
来源:牛客网

华华给月月出题
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
华华刚刚帮月月完成了作业。为了展示自己的学习水平之高超,华华还给月月出了一道类似的题:
Ans=\oplus_{i=1}^N(i^N\mod(10^9+7))Ans=⊕
i=1
N

(i
N
mod(10
9
+7))
\oplus⊕符号表示异或和,详见样例解释。
虽然月月写了个程序暴力的算出了答案,但是为了确保自己的答案没有错,希望你写个程序帮她验证一下。
输入描述:
输入一个正整数N。
输出描述:
输出答案Ans。
示例1
输入
复制
3
输出
复制
18
说明
N=3时,1^3=11
3
=1,2^3=82
3
=8,3^3=273
3
=27,异或和为18。
示例2
输入
复制
2005117
输出
复制
863466972
备注:
1\le N\le 1.3\times10^71≤N≤1.3×10
7

思路:

令 f(x)= x^N

则 f(a * b)=(a+b)^N=a^N * b^N=f(a) * f(b)

所以f(x)是一个完全积性函数,

所以可以用线筛来做,

对于素数,直接快速幂。因为素数的个数是O(n/log(n))级别的,快速幂的复杂度是O(log N) 的,所以总时间复杂度是O(N)。

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
ll powmod(ll a, ll b, ll MOD) {ll ans = 1; while (b) {if (b % 2)ans = ans * a % MOD; a = a * a % MOD; b /= 2;} return ans;}
inline void getInt(int* p);
const int maxn = 13000010;
const int inf = 0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/ll f[maxn];
ll n;
std::vector<ll> prime;
const ll mod = 1e9 + 7;
void init()
{memset(f, -1, sizeof(f));f[1] = 1ll;for (int i = 2; i < maxn; ++i){if (f[i] == -1){f[i] = powmod(1ll * i, n, mod);prime.push_back(i);}for (int j = 0; j < sz(prime) && prime[j]*i < maxn; ++j){f[prime[j]*i] = f[i] * f[prime[j]] % mod;if (i % prime[j] == 0){break;}}}
}int main()
{//freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);//freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);cin >> n;init();ll ans = 0ll;repd(i, 1, n){ans ^= f[i];}cout << ans << endl;return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/11420892.html

牛客小白月赛12 C 华华给月月出题 (积性函数,线性筛)相关推荐

  1. 华华给月月出题——牛客小白月赛12

    碰到个积性函数好题. 华华给月月出题:https://ac.nowcoder.com/acm/problem/23047 题目描述 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月 ...

  2. 牛客小白月赛12 H 华华和月月种树 (离线dfs序+线段树)

    链接:https://ac.nowcoder.com/acm/contest/392/H 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言2621 ...

  3. 牛客小白月赛12 D 月月给华华出题 (欧拉函数,数论,线筛)

    链接:https://ac.nowcoder.com/acm/contest/392/D 来源:牛客网 月月给华华出题 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K, ...

  4. 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)

    链接:https://ac.nowcoder.com/acm/contest/392/F 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536 ...

  5. 牛客小白月赛12 I 华华和月月逛公园 (tarjian 求桥)

    链接:https://ac.nowcoder.com/acm/contest/392/I 来源:牛客网 华华和月月逛公园 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K, ...

  6. 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)

    链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...

  7. 牛客小白月赛12:月月给华华出题(欧拉函数)

    月月给华华出题 思路 ∑i=1nigcd(i,n)\sum_{i = 1} ^{n} \frac{i}{gcd(i, n)}i=1∑n​gcd(i,n)i​ =∑d∣n∑i=1nid(gcd(i,d) ...

  8. 牛客小白月赛12 B.华华教月月做数学(Java)

    华华教月月做数学 题目链接:https://ac.nowcoder.com/acm/contest/392/B 题目描述 找到了心仪的小姐姐月月后,华华很高兴的和她聊着天.然而月月的作业很多,不能继续 ...

  9. 牛客小白月赛7 I.新建 Microsoft Office Word 文档

    牛客小白月赛7 I.新建 Microsoft Office Word 文档 题目链接 题目描述 CSL正在学习<计算机办公自动化>文件的建立与删除. CSL发现,当他新建一个word文档时 ...

最新文章

  1. 与HTTP关系密切的协议:IP、TCP、DNS
  2. VS2012经常使用的快捷方式完成最全面
  3. IPv6 — Multi-homing(多宿主/多链路/多归属)
  4. 递归神经网络部分组件(七)
  5. android 多参数,玩转Android monkey之多参数实战
  6. centos6 进入命令行_CentOS 6.x误删libc.so.6,紧急恢复
  7. 论文浅尝 | 通过阅读实体描述进行零样本的实体链接
  8. 1s完成 大文件分割方案
  9. 优化后亲测可用!免费下载QQ音乐大部分资源
  10. apa引用要在文中吗_英文论文格式要求玩转APA
  11. 域名注册处更改dns服务器,怎么修改DNS服务器_为什么要修改DNS服务器
  12. 怎么解决电脑任务管理器被系统管理员停用?
  13. uniapp仿网易云音乐项目(发布小程序、H5和安卓App)
  14. SQL中rand和order by rand()用法
  15. 基于沉积学教材的自顶向下的概念抽取(以沉积相为例为例)
  16. MongoDB学习笔记(基础操作篇)
  17. 基于jeecgboot的支持flowable的排它网关之后的会签功能(二)
  18. 两个博士读完,学术能力翻一倍?Nature专访三位「双料博士」
  19. SAP TRM 中的詹森阿尔法指数(Jensen's alpha)计算
  20. 六大原则之“里氏替代原则(LSP)“笔记

热门文章

  1. SAP ABAP实用技巧介绍系列之锁住某个特定的工作进程
  2. SAP ABAP实用技巧介绍系列之已知某个signature查找定义的方法
  3. wex5 php开发,WeX5平台PHP开发 使用说明文档
  4. java applet 游戏_Java Applet实现五子棋游戏
  5. always on sql 收缩日志_使用alwayson后如何收缩数据库日志的方法详解
  6. 在python中value是啥意思_【Python】python,字典中如何根据value值取对应的key值
  7. 配置中文_《洛克人Zero/ZX遗产合集》PC配置公布 支持中文
  8. iis php 0x80070032,访问网站时 HTTP 错误 404.17 - Internet Information Services | Microsoft Docs...
  9. python 给word添加背景图片_Python如何使用word文档插入图片和表格
  10. u9系统的使用方法仓库_新风系统如何使用 新风系统使用方法介绍【图文】