https://www.luogu.org/problemnew/show/P3601

一道关于欧拉函数的题。

读完题目以后我们知道所谓的$aindao(x)=x- \phi (x) $。

对于x小的情况下我们当然可以用 枚举因子或者线型筛求得,然而x打了以后就数组装不下了。

注意区间大小,我们完全可以只求这一部分区间内的x的$ \phi (x) $,数字移一下位置就好了。

然而求没一个数的欧拉函数值时我们只用到了,小于等于$\sqrt x$的质因子(就想线性筛一样),所以我们只需要晒出小于$\sqrt r$的素数是什么,然后了枚举区间中每一个数的倍数然后用公式进行不断地更新就好了。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
#define LL long long
#define mod 666623333
LL prime[],vis[],tot,cnt,phi[];
LL l,r,ans;
void prepare()
{
for(int i=;i<=;i++)
{
if(!vis[i])prime[++tot]=i;
for(int j=;j<=tot&&prime[j]*i<=;j++)
{
vis[prime[j]*i]=;
if(i%prime[j]==)
{
// phi[i*prime[j]]=phi[i]*prime[j];
break;
}
// else phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}
}
LL A[],B[];
int main()
{
prepare();
scanf("%lld%lld",&l,&r);
for(LL i=;i<=r-l+;i++)phi[i]=B[i]=i+l-;
for(LL i=;i<=tot&&prime[i]*prime[i]<=r;i++)
{
LL lb=prime[i]*(l/prime[i]),rb=prime[i]*(r/prime[i]);
// cout<< lb<<" "<<rb<<"\n";
for(LL j=lb;j<=rb;j+=prime[i])
{
if(j>=l)
{
phi[j-l+]=phi[j-l+]/prime[i]*(prime[i]-);
while(B[j-l+]%prime[i]==)B[j-l+]/=prime[i];
}
}
} for(int i=;i<=r-l+;i++)
{
if(B[i]>)phi[i]=phi[i]/B[i]*(B[i]-); //剩下一堆大质数了。
ans+=l+i--phi[i];ans%=mod;
}
cout<<ans;
}

洛谷 P3601 签到题的更多相关文章

  1. A 洛谷 P3601 签到题 [欧拉函数 质因子分解]

    题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...

  2. 洛谷P3601签到题(欧拉函数)

    题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...

  3. 洛谷P3601 签到题

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. 洛谷3794 签到题IV

    题目描述 给定一个长度为n的序列$a_1,a_2...a_n$,其中每个数都是正整数. 你需要找出有多少对(i,j),$1 \leq i \leq j \leq n$且$gcd(a_i,a_{i+1} ...

  5. 洛谷P3764 签到题 III

    题目背景 pj组选手zzq近日学会了求最大公约数的辗转相除法. 题目描述 类比辗转相除法,zzq定义了一个奇怪的函数: typedef long long ll; ll f(ll a,ll b) { ...

  6. 【noip】跟着洛谷刷noip题2

    noip好难呀. 上一个感觉有点长了,重开一个. 36.Vigenère 密码 粘个Openjudge上的代码 #include<cstdio> #include<iostream& ...

  7. [洛谷P1707] 刷题比赛

    洛谷题目连接:刷题比赛 题目背景 nodgd是一个喜欢写程序的同学,前不久洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情,他就打算用这些事情来出题恶心大家-- ...

  8. 洛谷P5274 优化题(ccj)

    洛谷P5274 优化题(ccj) 题目背景 CCJCCJ 在前往参加 Universe \ OIUniverse OI 的途中... 题目描述 有一个神犇 CCJCCJ,他在前往参加 Universe ...

  9. 洛谷 P4148 简单题 KD-Tree 模板题

    Code: //洛谷 P4148 简单题 KD-Tree 模板题 #include <cstdio> #include <algorithm> #include <cst ...

随机推荐

  1. appium自动化测试框架——封装获取设备信息类

    在上一节中,我们已经解决了如何在python中执行cmd,并获取执行结果.下面就小小实战一下,获取设备信息. 一.思路 1.windows上获取设备信息的方法 输入dos命令“adb devices” ...

  2. selenium+Python搭建

    安装环境:windows 7 64位   1.安装python,版本为python2.7 1)下载安装包. 在python官方网站选择下载python2版本的windows安装包:python-2.7 ...

  3. Git 深度学习填坑之旅一(git安装和配置、基本命令)

    前戏 最近不管是工作还是ctf比赛,接触与使用git变得越来越多,git半吊子水平的我已经不能支撑日常工作了.碰巧自己公司项目刚上线,现在能挤出一点时间来挖一下这个坑... 为什么使用Git 1.后悔 ...

  4. CentOS yum源的配置

    yum操作 1.用YUM安装软件包命令:yum install 2.用YUM删除软件包命令:yum remove 3.使用YUM查找软件包命令:yum search4.列出所有可安装的软件包命令:yu ...

  5. Jmeter JDBC Request的使用

    1. JDBC Request 这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作.它经常需要和JDBC Connection Configuration ...

  6. Vijos 1002 过河 dp + 思维

    https://www.vijos.org/p/1002 设dp[i]表示跳到了第i个点,需要的最小的步数. 所以复杂度O(L * T), 不行 注意到T最大是10, 所以dp[i]最多只由10项递推 ...

  7. SSIS控件使用

    1.转换控件: 2.执行SQL任务,返回一个值后,判断全量,还是增量?

  8. css简单动画

    这几天公司需要更新一个移动端web的页面,因为任务简单,就交给作为菜鸟新人的我来做.第一次接触css还是在14年刚上大一的时候跟着html一起学习的,之后就再也没有接触过.所以只好一边学习,一边完成任 ...

  9. 织梦修改文档HTML默认保存路径

    \data\config.cache.inc.php $cfg_arcdir = '/a'; 改为 $cfg_arcdir = '/';

  10. 初识EditText - 自定义EditText形状

    EditText继承自TextView,是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理. 使用 android:hint属性来指定了一段提 ...