Project Euler 728 题解
Problem 728 Circle of Coins
得到 Wallbreaker5th 的指导。
\(F\) 就是求这些环上区间(记为 \(A\))的异或线性基大小。令 \(A'_i\gets A_i\oplus A_{i+1}\)。现在求 \(\lang A'\rang\) 的线性基。如果可能从全黑和全白间转换,那么 \(\dim \lang A'\rang=\lang A\rang-1\),否则不 \(-1\)。这个转换的条件是 \(\frac k{(n,k)}\equiv 1 \pmod 2\)。
接下来观察到 \(A'_i,A'_{i+k\bmod n},A'_{i+2k\bmod n}\dots\) 覆盖到的集合对于不同等价类(\(i,i+k\dots\) 在一个等价类)无交。因此这些是独立的。
对于一个等价类去掉无法覆盖到的位置,等价类就形如 \(110000,011000,001100,\dots 100001\),有 \(\frac n{(n,k)}\) 个向量。线性基的大小是:\(\frac n{(n,k)}-1\),这是显然的。所以得到:
\]
尝试计算答案。
=\sum_{n=1}^N 2^n\sum_{d\mid n}2^{-d}\sum_{dt\mid n}\mu(t)\sum_{k=1}^{\frac n{dt}}2^{kt\bmod 2}
\]
所以可以直接卷积 \(O(n\log n)\) 解决。应该是可以 \(O(n\log\log n)\) 的,未知线性行不行。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e7+5,mod=1e9+7;
int pw[maxn],ipw[maxn],mu[maxn],n,F[maxn],G[maxn],H[maxn],inv[maxn];
bool isp[maxn];vector<int> pr;
int qp(int a,int b){
if(b==0)return 1;
int T=qp(a,b>>1);T=T*T%mod;
if(b&1)T=T*a%mod;
return T;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;mu[1]=1;
for(int i=2;i<=n;i++){
if(!isp[i])mu[i]=-1,pr.push_back(i);
for(auto u:pr){
if(i*u>n)break;
isp[i*u]=1;
if(i%u==0){
mu[i*u]=0;
break;
}
mu[i*u]=-mu[i];
}
}
pw[0]=1;pw[1]=2;ipw[0]=1,ipw[1]=(mod+1)/2;
for(int i=2;i<=n;i++)pw[i]=pw[i-1]*2%mod,ipw[i]=ipw[i-1]*ipw[1]%mod;
for(int i=1;i<=n;i++)inv[i]=qp(i,mod-2);
for(int i=1;i<=n;i++)for(int j=i;j<=n;j+=i)(F[j]+=ipw[i]*mu[j/i])%=mod;
for(int i=1;i<=n;i++)G[i]=i;
for(int i=1;i<=n;i++)for(int j=i;j<=n;j+=i)(H[j]+=G[i]*F[j/i])%=mod;
int ans=0;for(int i=1;i<=n;i++)(ans+=pw[i]*H[i])%=mod;
for(int i=1;i<=n;i++)F[i]=0,H[i]=0;
for(int i=1;i<=n;i++)for(int j=i;j<=n;j+=i)(F[j]+=ipw[i]*mu[j/i]*((j/i)&1))%=mod;
for(int i=1;i<=n;i++)G[i]=(i+1)/2;
for(int i=1;i<=n;i++)for(int j=i;j<=n;j+=i)(H[j]+=G[i]*F[j/i])%=mod;
for(int i=1;i<=n;i++)(ans+=pw[i]*H[i])%=mod;
ans=(ans%mod+mod)%mod;
cout<<ans<<endl;
return 0;
}
Project Euler 728 题解的更多相关文章
- project euler 169
project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...
- Python练习题 040:Project Euler 012:有超过500个因子的三角形数
本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...
- [project euler] program 4
上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...
- Python练习题 029:Project Euler 001:3和5的倍数
开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...
- Project Euler 9
题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...
- Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.
In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...
- 【Project Euler 8】Largest product in a series
题目要求是: The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × ...
- Project Euler 第一题效率分析
Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...
- Python练习题 049:Project Euler 022:姓名分值
本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...
- Python练习题 048:Project Euler 021:10000以内所有亲和数之和
本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...
随机推荐
- 看不懂来打我,Vue3的watch是如何实现监听的?
前言 watch这个API大家都很熟悉,今天这篇文章欧阳来带你搞清楚Vue3的watch是如何实现对响应式数据进行监听的.注:本文使用的Vue版本为3.5.13. 关注公众号:[前端欧阳],给自己一个 ...
- python项目依赖管理之poetry
poetry,是一个强大的Python项目依赖管理工具,旨在简化和优化项目的依赖管理过程.它提供了一种简单且一致的方式来定义.安装和管理项目所需的依赖项.本文将详细介绍poetry库的安装方法.使用方 ...
- kafka之介绍
Kafka 由于高吞吐量.可持久化.分布式.支持流数据处理等特性而被广泛应用.但当前关于Kafka原理及应用的相关资料较少,在我打算编写本文时,还没有见到中文版本的Kafka相关书籍,对于初学者甚至是 ...
- Django之model外键
外键和表关系 外键: 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的.外键的存在使得ORM框架在处理表关系的时候异常的强大.因 ...
- Django+SimpleUI
1.安装 pip install django-simpleui -i https://pypi.tuna.tsinghua.edu.cn/simple 2.修改配置文件 # 修改project的se ...
- 文件上传漏洞&靶场通关详解
文件上传漏洞&靶场通关详解 什么是文件上传漏洞? 大部分网站都拥有上传文件的部分,文件上传漏洞是由于网站开发者对用户上传文件的过滤不够严格,攻击者可以通过这些漏洞上传可执行文件(如木马,恶意脚 ...
- Kubernetes集群巡检内容
1.概述 Kubernetes 集群巡检是一种监测和评估底层系统运行状况的重要手段,旨在快速发现系统中存在的潜在风险并提供修复建议.通过对 Kubernetes(K8s)集群进行定期巡检,可以有效保障 ...
- 前端好用API之MutationObserver
前情 一直以来都没有好的方式可以监听元素变化,Mutation events虽然可以监听DOM树结构变化,但是因性能问题和差的兼容问题(Webkit内核不支持)并不推荐使用. MutationObse ...
- Flutter showModalBottomSheet改变高度
showModalBottomSheet改变高度 将isScrollControlled设置为true,此时弹窗会全屏展示,再返回一个带高度的SizedBox,就可以指定弹窗的高度了 showModa ...
- 【JavaWeb】【Cookie】通过Cookie记录用户上次登陆时间并判断用户是否是首次登陆
通过Cookie记录用户上次登陆时间并判断用户是否是首次登陆 Cookie类的构造方法 public Cookie(java.lang.String name,java.lang.String ) 1 ...