我写不动前两个了。

原谅一下。


【题目描述】

\(\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的更多相关文章

  1. 2019.10.29 CSP%您赛第四场t2

    我太菜了我竟然不会分层图最短路 ____________________________________________________________________________________ ...

  2. 2019.10.26 CSP%您赛第三场

    \(CSP\)凉心模拟^_^ --题源\(lqx.lhc\)等各位蒟蒻 题目名称 比赛 传递消息 开关灯 源文件名 \(competition.cpp\) \(message.cpp\) \(ligh ...

  3. 2019.10.24 CSP%你赛第二场d1t3

    题目描述 Description 精灵心目中亘古永恒的能量核心崩溃的那一刻,Bzeroth 大陆的每个精灵都明白,他们的家园已经到了最后的时刻.就在这危难关头,诸神天降神谕,传下最终兵器——潘少拉魔盒 ...

  4. 【春训团队赛第四场】补题 | 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 ...

  5. NOI.AC NOIP模拟赛 第四场 补记

    NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...

  6. 2019.10.15 CSP初赛知识点整理

    初赛需要的知识点整理如下: (1)计算机的硬件组成与基本常识 (2)单位/进制的转换 (3)进制/逻辑运算相关 (4)概率与期望 (5)排序的各种性质 (6)简单数据结构的使用(栈.队列.链表等) ( ...

  7. 【2019.10.7 CCF-CSP-2019模拟赛 T3】未知的数组(unknown)(并查集+动态规划)

    预处理 考虑模数\(10\)是合数不好做,所以我们可以用一个常用套路: \(\prod_{i=l}^ra_i\equiv x(mod\ 10)\)的方案数等于\(\prod_{i=l}^ra_i\eq ...

  8. 【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}\ ...

  9. 【2019.10.7 CCF-CSP-2019模拟赛 T1】树上查询(tree)(思维)

    思维 这道题应该算是一道思维题吧. 首先你要想到,既然这是一棵无根树,就要明智地选择根--以第一个黑点为根(不要像我一样习惯性以\(1\)号点为根,结果直到心态爆炸都没做出来). 想到这一点,这题就很 ...

随机推荐

  1. ajax跨域问题以及解决方案

    转:https://blog.csdn.net/csdn_ds/article/category/6937392/3 在工作中,大家应该都遇到过ajax跨域问题,浏览器的错误如下: XMLHttpRe ...

  2. idea Error: java: OutOfMemoryError: insufficient memory处理

    在更新项目代码或者运行项目时报错 OutOfMemoryError: insufficient memory,解决方式如下: 方式1: 点击file,选择Invalidate Caches 进行清理一 ...

  3. spring后台重定向方式

    1.直接返回值中加重定向:"redirect:要访问的网址"; public String updateOrAddProject() { return "redirect ...

  4. 正睿OI国庆day1

    正睿OI国庆day1 T1 \[ S_n=1*S_{n-1}+1*F_{n-1}+1*F_{n-2}+1*f_{n-1}+1*f_{n-2} \] \[ F_{n}=0*S_{n-1}+1*F_{n- ...

  5. F#周报2019年第40期

    新闻 将项目成熟度重新考虑为一个社区过程 介绍.NET Core Windows Form设计器预览1 F# 4.7可以预览新语言特性与语法 视频及幻灯片 DotnetConf2019展示 .NET设 ...

  6. 序列标注(BiLSTM-CRF/Lattice LSTM)

    前言 在三大特征提取器中,我们已经接触了LSTM/CNN/Transormer三种特征提取器,这一节我们将介绍如何使用BiLSTM实现序列标注中的命名实体识别任务,以及Lattice-LSTM的模型原 ...

  7. 由std::once_call 引发的单例模式的再次总结,基于C++11

    一个偶然的机会,知道了std::once_call这个东西. 了解了下,std::once_call支持多线程情况下的某函数只执行一次.咦,这个不是恰好符合单例模式的多线程安全的困境吗? 单例模式,经 ...

  8. Scala Try Catch Finally

    Scala Try Catch Finally: 在Java中返回值优先级顺序:finally最高, try,catch 选其一,try中抛异常,返回catch,不抛异常,返回try,. public ...

  9. Flutter 的基本控件

    文本控件 Text 支持两种类型的文本展示,一个是默认的展示单一样式文本 Text,另一个是支持多种混合样式的富文本 Text.rich. 单一样式文本 Text 单一样式文本 Text 的初始化,是 ...

  10. vue多级复杂列表展开/折叠,全选/分组全选实现

    首先,来看下效果图 在线体验地址:https://hxkj.vip/demo/multipleList/.温馨提示,打开之后按F12,使用手机模式食用,口味更佳! 可以看出,这个列表有三种展现形式: ...