这题很好啊,好在我没做出来。。。大概分析了一下,题目大概意思就是求

问所有满足1<=i<=n且i与m互素的ai之和

最开始我们队的做法是类似线性筛的方法去筛所有数,把数筛出来后剩下数即可,但是这样的是时间复杂度十分大,我们需要遍历每个质因

的倍数,这样最坏的复杂度是很大的1e8,因为我们需要把i的倍数筛到1e8,这样肯定不行,那么想想其他办法

我们想到了容斥-----(赛后想到的)

我们可以推处一个公式ai=i*i+i;

那么ai的前n项和Tn=n*(n+1)*(2*n+1)/6+n*(n+1)/2;

我们知道了前N项和,再减去和M不互质的数的贡献即可,那么怎么利用上面式子算贡献呢???

根据算数基本定理将m分解,与m不互素的就是至少有其中一个因子,算所有的所以要容斥

对于每个因子积sum,会形成sum,2*sum,3*sum...[n/sum]*sum这些不互素的数,

设k=[n/sum],我们把这些数提出一个sum

那么这些数变成了sum*(1+2+3+....+k)那么在这个sum下,这个贡献T=k*(k+1)*(2*k+1)/6*i*i+k*(k+1)/2*i;

有人回想为什么??需要乘以i*i和i呢??我们可以看一下原来的an=i*i+i;那么前an=(k*i)*(k*i)+k*i=i*i*k*k+k*i;

如果没看懂,可以看看这个

https://blog.csdn.net/lngxling/article/details/82530798

我的代码

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
const ll mod = 1e9+;
ll inv6=;
ll inv2=;
ll a[];
ll sum(ll n,ll i){
n=n/i;
ll ans=((n%mod)*(n+)%mod*(*n+)%mod*inv6%mod*i%mod*i%mod+n%mod*(n+)%mod*inv2%mod*i%mod)%mod;
return ans;
};
int main(){
long long n,m;
int cnt;
int num[];
while(~scanf("%lld%lld",&n,&m)){
int tmp=m;
cnt=;
while(tmp!=){
int flag=;
for (int i=;i<=sqrt(m);i++){
if (tmp%i==){
num[cnt]=i;
cnt++;
flag=;
}
while(tmp%i==){
tmp/=i;
}
//cout<<"--"<<endl;
}
if(flag== && tmp!=){
num[cnt]=tmp;
cnt++;
break;
}
}
ll ans=sum(n,);
ll ans2=;
//cout<<"--"<<endl;
for (int i=;i<(<<cnt);i++){
int flag=;
ll temp=;
for (int j=;j<cnt;j++)
if (i&(<<j))
{
// cout<<"--"<<endl;
flag++;
temp=temp*num[j]%mod;
}
// cout<<"---"<<endl;
temp=sum(n,temp);
//cout<<"---"<<endl;
if (flag%==)
{
ans2=(ans2%mod+temp%mod)%mod;
}else {
ans2=(ans2%mod-temp%mod+mod)%mod;
}
}
printf("%lld\n",(ans%mod-ans2%mod+mod)%mod);
}
return ;
}

ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire的更多相关文章

  1. ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire (素因子分解+容斥)

    . 样例输入复制 4 4 样例输出复制 14 #include<bits/stdc++.h> using namespace std; typedef long long ll; cons ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire(容斥)

    https://nanti.jisuanke.com/t/31448 题意 已知a序列,给你一个n和m求小于n与m互质的数作为a序列的下标的和 分析 打表发现ai=i*(i+1). 易得前n项和为 S ...

  3. 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} ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛 G 容斥原理

    https://nanti.jisuanke.com/t/31448 解析 易得an=n*n+n O(1)得到前n项和  再删除与m不互素的数  我们用欧拉函数求出m的质因数  枚举其集合的子集 进行 ...

  5. 【ACM-ICPC 2018 沈阳赛区网络预赛 G】Spare Tire

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让你求出1..n中和m互质的位置i. 让你输出∑ai 这个ai可以oeis一波. 发现是ai = i(i+1) 1..n中和m互质的 ...

  6. 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 ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)

    ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...

  8. ACM-ICPC 2018 沈阳赛区网络预赛 K Supreme Number(规律)

    https://nanti.jisuanke.com/t/31452 题意 给出一个n (2 ≤ N ≤ 10100 ),找到最接近且小于n的一个数,这个数需要满足每位上的数字构成的集合的每个非空子集 ...

  9. 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 ...

随机推荐

  1. 手把手教你搭建WEB服务器和FTP服务器

    注:本次教程的环境是在“Windows 10 PC中远程控制的Windows Server 2012 R2服务器”,你可以自己在自己电脑中安装虚拟机再安装Windows Server 2012 R2服 ...

  2. zabbix疑难之时区问题

    zabbix疑难总结: 1.zabbix的web界面的时间不对.晚12个小时整 适用于:安装网上的说法来修改,但是时间仍然不对的情况   我们按照以前的网上的那些方法在配置zabbix,需要配置时区: ...

  3. c#中//注释和///注释的区别

    c#中//注释和///注释的区别 ///会被编译,//不会所以使用///会减慢编译的速度(但不会影响执行速度)///会在其它的人调用你的代码时提供智能感知 也是一种注释,但是这种注释主要有两种作用:1 ...

  4. Linux 小知识翻译 - 目录 (完结)

    偶尔在网上看到的这篇文章,总结了linux中一些天天在说的概念.可能是因为天天说的关系, 一直以为自己知道这些概念.其实对有些概念也只是似是而非的了解而已. 为此,决定将所有的小知识点全翻译下来,给自 ...

  5. Source Insight4 破解安装

    首先确保你在官网下载了原版4.0并安装好了. 1,下载如下的sourceinsight4.exe文件,替换安装文件夹下的sourceinsight4.exe. 链接:http://pan.baidu. ...

  6. $Matrix-Tree$定理-题目

    $Matrix-Tree$ 其实矩阵树的题挺好玩的,一些是套班子求答案的,也有一些题目是靠观察基尔霍夫矩阵性质推式子的. 文艺计算姬:https://www.lydsy.com/JudgeOnline ...

  7. Spring Boot开发Web应用

    静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /s ...

  8. 1346:【例4-7】亲戚(relation)

    并查集的模板题: #include<iostream> #include<cstdio> using namespace std; ; int fa[maxn]; int fi ...

  9. remove-duplicates-from-sorted-list (删除)

    题意略: 思路:先造一个点它与所有点的值都不同,那么只要后面两个点的值相同就开始判断后面是不是也相同,最后将相同的拆下来就可以了. #include<iostream> #include& ...

  10. python函数查询、数学和比较操作符、二元操作符

    http://www.runoob.com/python/func-number-round.html print().input()用户输入输出,格式为字符串 len() 求字符串的长度 str() ...