ACM-ICPC 2018 沈阳赛区网络预赛 G 容斥原理
https://nanti.jisuanke.com/t/31448
解析 易得an=n*n+n O(1)得到前n项和 再删除与m不互素的数 我们用欧拉函数求出m的质因数 枚举其集合的子集 进行容斥
n*n+n+2n*2n+2n+3n*3n+3n=(1+4+9)*n*n+(1+2+3)*n 所以也可以O(1)得到。
AC代码
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(a) (a).begin(), (a).end()
#define fillchar(a, x) memset(a, x, sizeof(a))
#define huan printf("\n");
#define debug(a,b) cout<<a<<" "<<b<<" ";
using namespace std;
const int maxn=1e5+,inf=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> pii;
const ll mod=1e9+;
int yin[maxn],cnt;
void euler(ll n) //返回euler(n)
{
ll res=n,a=n;
cnt=;
for(ll i=; i*i<=a; i++)
{
if(a%i==)
{
yin[cnt++]=i;
res=res/i*(i-);//先进行除法是为了防止中间数据的溢出 爆int
while(a%i==)
a/=i;
}
}
if(a>)
res=res/a*(a-),yin[cnt++]=a;
}
ll powmod(ll n,ll m)
{
ll ans=;
while(m>)
{
if(m&)
ans=ans*n%mod;
m = m>>;
n = n*n%mod;
}
return ans;
}
ll inv2=powmod(,mod-);
ll inv6=powmod(,mod-);
ll getsum1(ll n)
{
return n*(n+)%mod*(*n%mod+)%mod*inv6%mod;
}
ll getsum2(ll n)
{
return n*(n+)%mod*inv2%mod;
}
int main()
{
ll n,m;
while(scanf("%lld%lld",&n,&m)!=EOF)
{
euler(m);
ll ans=(getsum1(n)+getsum2(n))%mod;
for(int i=; i<(<<cnt); i++)
{
ll temp=,jishu=;
for(int j=; j<cnt; j++)
{
if(i&(<<j))
temp*=yin[j],jishu++;
}
if(temp==)continue;
ll bei=n/temp;
ans=(ans+powmod(-,jishu)*temp*temp%mod*getsum1(bei)%mod+mod)%mod;
ans=(ans+powmod(-,jishu)*temp*getsum2(bei)%mod+mod)%mod;
}
printf("%lld\n",ans);
}
}
ACM-ICPC 2018 沈阳赛区网络预赛 G 容斥原理的更多相关文章
- ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire (素因子分解+容斥)
. 样例输入复制 4 4 样例输出复制 14 #include<bits/stdc++.h> using namespace std; typedef long long ll; cons ...
- ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire(容斥)
https://nanti.jisuanke.com/t/31448 题意 已知a序列,给你一个n和m求小于n与m互质的数作为a序列的下标的和 分析 打表发现ai=i*(i+1). 易得前n项和为 S ...
- ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire
这题很好啊,好在我没做出来...大概分析了一下,题目大概意思就是求 问所有满足1<=i<=n且i与m互素的ai之和 最开始我们队的做法是类似线性筛的方法去筛所有数,把数筛出来后剩下数即可, ...
- ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire (容斥原理)
可推出$a_n = n^2+n, $ 设\(S_n = \sum_{i=1}^{n} a_i\) 则 \(S_n = \frac{n(n+1)(2n+1)}{6} + \frac{n(n+1)}{2} ...
- 【ACM-ICPC 2018 沈阳赛区网络预赛 G】Spare Tire
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让你求出1..n中和m互质的位置i. 让你输出∑ai 这个ai可以oeis一波. 发现是ai = i(i+1) 1..n中和m互质的 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 J树分块
J. Ka Chang Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero p ...
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)
ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...
- ACM-ICPC 2018 沈阳赛区网络预赛 K Supreme Number(规律)
https://nanti.jisuanke.com/t/31452 题意 给出一个n (2 ≤ N ≤ 10100 ),找到最接近且小于n的一个数,这个数需要满足每位上的数字构成的集合的每个非空子集 ...
- ACM-ICPC 2018 沈阳赛区网络预赛-K:Supreme Number
Supreme Number A prime number (or a prime) is a natural number greater than 11 that cannot be formed ...
随机推荐
- PHP Deprecated: Function split() is deprecated in /var/www/html/cacti/cmd.php on line 61
[root@localhost cacti]# php cmd.php PHP Deprecated: Function split() is deprecated in /var/www/html/ ...
- Java 利用FTP上传,下载文件,遍历文件目录
Java实现FTP上传下载文件的工具包有很多,这里我采用Java自带的API,实现FTP上传下载文件.另外JDK1.7以前的版本与其之后版本的API有了较大的改变了. 例如: JDK1.7之前 JDK ...
- jdbc获取数据具体过程
下面是个最简单的使用jdbc取得数据的应用.在例子之后我将分成4步,分别是①取得连接,②创建PreparedStatement,③设置参数,④执行查询,来分步分析这个过程.除了设置参数那一步之外,其他 ...
- Ubuntu16.04常用操作命令总结ing
查看软件安装目录:whereis 软件名称(如:whereis mysql,where is sqlite3等) 安装软件:apt/apt-get install 软件名称(如:apt/apt-get ...
- # Transition:添加弹出过渡效果
# Transition:添加弹出过渡效果 通过鼠标的单击.获得焦点,被点击或对元素任何改变中触发,并平滑地以动画效果改变CSS的属性值. W3C-transition MDN-transition ...
- 解决Homestead yarn , npm run dev, 命令报错问题!
解决Homestead yarn , npm run dev, 命令报错问题! 2018年06月01日 11:50:51 偶尔发发颠 阅读数:1654 版权声明:本文为博主原创,未经博主同意,不 ...
- centOS7安装 mysql-community-release-el7-5.noarch.rpm 包
一.rpm包 1.wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm(下载rpm) 2.rpm -ivh mysql ...
- Springboot 配置文件与对象之间进行映射之@ConfigurationProperties
一.将配置文件与实体类绑定1.1.将yaml配置文件的属性映射到Javabean中1.1.1.yaml配置文件注意:键值对的语法,键:之后必须要有空格 1.1.2.Javabean 定义注意:java ...
- windows定时执行python脚本
from:http://blog.csdn.net/Gpwner/article/details/77882131
- ios之UITextfield (2)
UItextField通常用于外部数据输入,以实现人机交互.下面以一个简单的登陆界面来讲解UItextField的详细使用. //用来显示“用户名”的label UILabel* label1 = [ ...