2019.10.28 CSP%您赛第四场t3
我写不动前两个了。
原谅一下。
【题目描述】
\(\varphi\)函数是数论中非常常用的函数。对于正整数 x,\(\varphi\)(x) 表示不超过 x 的所有正整数
与 x 互质的个数。
现在我们对它进行一次拓展:对于正整数 x,y,定义 \(\varphi\)(x,y) 表示不超过 y 的所有正
整数与 x 互质的个数。
现在我们给定正整数 n 和 m,对于所有不超过 n 的正整数 i,求 \(\varphi\)(i,m)。
【输入格式】
从文件 phi.in 中读入数据。
输入仅一行两个正整数 n 和 m。
【输出格式】
输出到文件 phi.out 中。
输出 n 行,每行一个整数。第 i 行表示 \(\varphi\)(i,m)。
【样例输入】
11 10
【样例输出】
10
5
7
5
8
3
9
5
7
4
10
以上题面。
顺便补一句,以上算法可接受的复杂度是\(O(n\sqrt n)\)。
容易知道,我们枚举所有\(i\leq n\)时,时间复杂度是\(O(n)\)。所以对于每个数的判断,我们可接受的复杂度大约是\(O(\sqrt n)\)。
考虑原来做过的题类似的做法。对于一个数\(i\),与这个数互质的数的本质实际上是不存在与\(i\)相同的质因子。所以对于每个\(i\),我们用\(O(\sqrt n)\)的复杂度求出其所有质因子作为预处理;
而对于每一个求出的质因子,任何含有该质因子的数都不能贡献到答案上。但是由于存在同时具有好几个该数质因子的情况,考虑容斥原理:
举个例子,如果一个数有3个质因子,设其为\(a_1,a_2,a_3\),则\(ans=m-m/a1-m/a2-m/a3+m/a1/a2+m/a2/a3+m/a1/a3-m/a1/a2/a3\)。其中\(m\)是最大取值个数。
同理,设一个数有k个质因子,则容易知道:
\(ans=m-m/(所有奇数个a_k相乘的可能)+m/(所有偶数个a_k)相乘的可能\)。
容易证明。当我们减去所有含有单个质因子的数时,我们多减去了所有严格含有两个质因子的数;再加上严格含有两个质因子的数,又多加了严格含有三个质因子的数;……以此类推,其实是\(k\)阶维恩图上的容斥原理。
所以我们可以用一个二进制数的每一位代表该质因子是否被选中。若选中了偶数个质因子,则加上;否则减去。
上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define dep(i,n,a) for(int i=n;i>=a;i--)
#define int long long
using namespace std;
int n,m,prime[100050],idx,ans,book_prime[100050],idx1;
bool is_prime[100050],book[100050],mark[100050];
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
signed main()
{
memset(prime,-1,sizeof prime);
n=read(),m=read();
rep(i,1,n)
{
memset(book,0,sizeof book);
memset(mark,0,sizeof mark);
ans=m;
idx1=0;
int temp=i;
int qqqqqq=sqrt(i);
rep(j,2,qqqqqq)
{
if(temp%j==0)
{
book_prime[++idx1]=j;
while(temp%j==0)
temp/=j;
}
}
if(temp>1)
book_prime[++idx1]=temp;
int maxn=(1<<idx1)-1;
rep(j,1,maxn)
{
int cnt=0;
int tmp=j;
int base=1;
int mul=1;
while(tmp)
{
if(tmp&1)
++cnt,mul*=book_prime[base];
++base;
tmp>>=1;
}
if(cnt&1)ans-=m/mul;
else ans+=m/mul;
}
printf("%lld\n",ans);
}
return 0;
}
2019.10.28 CSP%您赛第四场t3的更多相关文章
- 2019.10.29 CSP%您赛第四场t2
我太菜了我竟然不会分层图最短路 ____________________________________________________________________________________ ...
- 2019.10.26 CSP%您赛第三场
\(CSP\)凉心模拟^_^ --题源\(lqx.lhc\)等各位蒟蒻 题目名称 比赛 传递消息 开关灯 源文件名 \(competition.cpp\) \(message.cpp\) \(ligh ...
- 2019.10.24 CSP%你赛第二场d1t3
题目描述 Description 精灵心目中亘古永恒的能量核心崩溃的那一刻,Bzeroth 大陆的每个精灵都明白,他们的家园已经到了最后的时刻.就在这危难关头,诸神天降神谕,传下最终兵器——潘少拉魔盒 ...
- 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集
春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...
- NOI.AC NOIP模拟赛 第四场 补记
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
- 2019.10.15 CSP初赛知识点整理
初赛需要的知识点整理如下: (1)计算机的硬件组成与基本常识 (2)单位/进制的转换 (3)进制/逻辑运算相关 (4)概率与期望 (5)排序的各种性质 (6)简单数据结构的使用(栈.队列.链表等) ( ...
- 【2019.10.7 CCF-CSP-2019模拟赛 T3】未知的数组(unknown)(并查集+动态规划)
预处理 考虑模数\(10\)是合数不好做,所以我们可以用一个常用套路: \(\prod_{i=l}^ra_i\equiv x(mod\ 10)\)的方案数等于\(\prod_{i=l}^ra_i\eq ...
- 【2019.10.7 CCF-CSP-2019模拟赛 T2】绝对值(abs)(线段树细节题)
找规律 设\(p_i=a_{i+1}-a_i\),则答案就是\(\sum_{i=1}^{n-1}p_i\). 考虑若将\(a_i\)加上\(x\)(边界情况特殊考虑),就相当于是将\(p_{i-1}\ ...
- 【2019.10.7 CCF-CSP-2019模拟赛 T1】树上查询(tree)(思维)
思维 这道题应该算是一道思维题吧. 首先你要想到,既然这是一棵无根树,就要明智地选择根--以第一个黑点为根(不要像我一样习惯性以\(1\)号点为根,结果直到心态爆炸都没做出来). 想到这一点,这题就很 ...
随机推荐
- JavaScript之对象Array
数组Array是JavaScript中最常用的类型之一,同一数组中可以保存任意类型的数据,并且它的长度是动态的,会随着数组中数据的加减自动变化.每个数组都有一个表示其长度(数组元素的个数)的lengt ...
- selenium-01-简介
一.Selenium是什么? Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,本系列现在主要包括以下4款: 1.Selenium Core:支持DHTML的测试案 ...
- linux 进程消耗查看
Linux下如何查看哪些进程占用的CPU内存资源最多 linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sor ...
- CentOS6.x环境通过yum命令在线安装或重装zookeeper-server
一.环境描述: 在CentOS6.x系统环境下,使用yum命令的形式安装zookeeper-server,由于我这里是重新安装zookeeper-server,所以在正式开始之前我需要将原本的zook ...
- Hadoop点滴-Hadoop分布式文件系统
Hadoop自带HDFS,即 Hadoop Distributed FileSystem(不是HaDoop FileSystem 的简称) 适用范围 超大文件:最新的容量达到PB级 流式数据访问:H ...
- .Net Core中间件和过滤器实现错误日志记录
1.中间件的概念 ASP.NET Core的处理流程是一个管道,中间件是组装到应用程序管道中用来处理请求和响应的组件. 每个中间件可以: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下 ...
- 难题解决:Mycat数据库中间件+Mybatis批量插入数据并返回行记录的所有主键ID
一.mybatis的版本必须为3.3.1及其以上 项目所依赖的mybatis的版本必须为3.3.1及其以上,低版本的不行,保证hap项目的依赖的mybatis的jar的版本必需为需要的版本: 二.在 ...
- MySQL 视图(合并多表数据)引发的严重性能问题
问题背景: 一.客户环境连续多次出现性能问题,系统登入异常,数据库CPU告警. 处理过程: 1>协助排查数据库性能问题时发现如下两个较频繁的SQL导致严重的性能问题(均使用了视图合并多表数据): ...
- Web开发小贴士 -- 全面了解Cookie
一.Cookie的出现 浏览器和服务器之间的通信少不了HTTP协议,但是因为HTTP协议是无状态的,所以服务器并不知道上一次浏览器做了什么样的操作,这样严重阻碍了交互式Web应用程序的实现. 针对上述 ...
- Maven下载速度过慢问题已解决
因为Maven 默认仓库的服务器在国外所以我们国内的使用效果极差,我们可以修改成为国内镜像地址加速下载. 两种方法 修改全局文件 C:\Users\您电脑帐号\ .m2\settings.xml没有文 ...