题面

Description

一个合数的真因数是指这个数不包括其本身的所有因数,

例如 6 的正因数有1, 2, 3, 6,其中真因数有 1, 2, 3。

一个合数的最大真因数则是这个数的所有真因数中最大的一个,例如 6 的最大真因数为 3。

给定正整数 l 和 r,请你求出 l 和 r 之间(包括 l 和 r)所有合数的最大真因数之和。

Input

输入共一行,包含两个正整数 l 和 r。保证 l ≤ r。

Output

输出共一行,包含一个整数,表示 [l,r] 内所有合数的最大真因数之和。

Sample Input

1 10

Sample Output

17

【样例 1 解释】

在 1 至 10 之间的合数有 4, 6, 8, 9, 10,

它们的最大真因数分别为 2, 3, 4, 3, 5,

因此最大真因数之和为 2 + 3 + 4 + 3 + 5 = 17。

Hint

【样例 2 输入】

101 1000

【样例 2 输出】

163446

【样例 3 输入】

180208 975313

【样例 3 输出】

151642139152

【样例 4 输入】

339762200 340762189

【样例 4 输出】

112318862921546

【样例 5 输入】

2500000000 5000000000

【样例 5 输出】

3094668961678105770

题目分析

要求合数的最大真因数,相当于求合数除以其最小质因子。

再Min_25筛求素数和的过程中:

\[g(n,j)=
\begin{cases}
g(n,j-1)&P_j^2> n\\
g(n,j-1)-f(P_j)\cdot[g(\frac{n}{P_j},j-1)-\sum_{i=1}^{j-1}f(P_i)]&P_j^2\leq n
\end{cases}
\]

其中

\[g(\frac{n}{P_j},j-1)-\sum_{i=1}^{j-1}f(P_i)
\]

求得的便是最小质因子为\(P_j​\)的合数之和。

我们只需在处理\(g\)的时候统计答案即可。

代码实现

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<cstdio>
  6. #include<iomanip>
  7. #include<cstdlib>
  8. #define MAXN 0x7fffffff
  9. typedef unsigned long long LL;
  10. const int N=250005;
  11. using namespace std;
  12. inline LL Getint(){register LL x=0,g=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')g=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*g;}
  13. int prime[N],tot;bool vis[N];
  14. LL sqr,w[N],g[N],sp[N];
  15. int id1[N],id2[N],m;
  16. void Pre(int n){
  17. for(int i=2;i<=n;i++){
  18. if(!vis[i])prime[++tot]=i,sp[tot]=sp[tot-1]+i;
  19. for(int j=1;j<=tot&&1ll*i*prime[j]<=n;j++){
  20. vis[i*prime[j]]=1;
  21. if(i%prime[j]==0)break;
  22. }
  23. }
  24. }
  25. LL Solve(LL n){
  26. tot=m=0;
  27. sqr=sqrt(n),Pre(sqr);
  28. for(LL i=1,j;i<=n;i=j+1){
  29. j=n/(n/i),w[++m]=n/i;
  30. g[m]=w[m]*(w[m]+1)/2-1;
  31. if(w[m]<=sqr)id1[w[m]]=m;else id2[j]=m;
  32. }
  33. LL ans=0;
  34. for(int j=1;j<=tot;j++){
  35. for(int i=1;i<=m&&(LL)prime[j]*prime[j]<=w[i];i++){
  36. int k=(w[i]/prime[j]<=sqr)?id1[w[i]/prime[j]]:id2[n/(w[i]/prime[j])];
  37. if(i==1)ans+=g[k]-sp[j-1];
  38. g[i]-=prime[j]*(g[k]-sp[j-1]);
  39. }
  40. }
  41. return ans;
  42. }
  43. int main(){
  44. LL l=Getint(),r=Getint();
  45. cout<<Solve(r)-Solve(l-1);
  46. return 0;
  47. }

【FJWC2018】最大真因数的更多相关文章

  1. BZOJ-5244 最大真因数(min25筛)

    题意:一个数的真因数指不包括其本身的所有因数,给定L,R,求这个区间的所有数的最大真因数之和. 思路:min25筛可以求出所有最小因子为p的数的个数,有可以求出最小因子为p的所有数之和. 那么此题就是 ...

  2. Project Euler 95:Amicable chains 亲和数链

    Amicable chains The proper divisors of a number are all the divisors excluding the number itself. Fo ...

  3. Python 计算当真因子个数为偶数个时为幸运数,计算区间内幸运数之和

    晚饭后朋友发来个问题,正好无事做,动手写了一下 若一个正整数有偶数个不同的真因子,则称该数为幸运数.如4含有2个真因子为 1 和 2 .故4是幸运数.求[2,100]之间的全部幸运数之和. 常规思路 ...

  4. POJ3292&&2115

    这两道题还是比较简单的,没有什么难度 不过归在数论这个专题里我还是比较认同的,多少有些关系 3292 题目大意:给你一个范围n,让你求出这个范围内所有形式类似\(4k+1(k为正整数)\)的数中的H- ...

  5. 【FCS NOI2018】福建省冬摸鱼笔记 day1

    省冬的第一天. 带了本子,笔,一本<算法导论>就去了.惊讶于为什么同学不带本子记笔记. 他们说:“都学过了.”,果然这才是巨神吧. 第一天:数论,讲师:zzx 前几页的课件挺水,瞎记了点笔 ...

  6. c经典算法

    1. 河内之塔 说明 河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时 北越的首都,即现在的胡志明市:1883年法国数学家 Ed ...

  7. 相亲数--Python

    想亲数:在遥远的古代,人们发现某些自然数之间有特殊的关系:如果两个数a和b,a的所有除本身以外的因数之和等于b,b的所有除本身以外的因数之和等于a,则称a,b是一对相亲数 code: def sumF ...

  8. Java经典算法大全

    1.河内之塔.. 2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6. ...

  9. 求n的因子个数与其因子数之和

    方法一:朴素算法:O(n). #include<bits/stdc++.h> using namespace std; int get_num(int n){ ; ;i<=n;++i ...

随机推荐

  1. maven环境变量配置及测试

    首先要确认,你是否已经安装了jdk,并且已经成功配置了环境变量. 和java配置类似,计算机右键属性->高级系统设置->环境变量. 添加如下变量: 变量名:maven_home 变量值:C ...

  2. Android ADB被占用 重启 ADB方法

    前言 ADB 是 android sdk里面的一个工具,这个工具可以用于操作管理 Android 模拟器 和 真实Andriod手机设备.列如 : 执行安装 删除 应用的操作 , 执行 模拟点击屏幕 ...

  3. Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6

     实现的功能: 使用MDA方式把串口接受的数据在发送给串口(当然也可以做其他解析控制使用) 1. 先初始化 时钟使用外部的晶振配置系统时钟为48Mhz 2. 串口参数配置 3. 使能中断 4. 配置串 ...

  4. 简单API接口签名验证

    前言 后端在写对外的API接口时,一般会对参数进行签名来保证接口的安全性,在设计签名算法的时候,主要考虑的是这几个问题: 1. 请求的来源是否合法 2. 请求参数是否被篡改 3. 请求的唯一性 我们的 ...

  5. Java 基础 - 继承

    子类继承父类的private字段么? Oracle的Java Documentation对Inheritance的定义: 很直白,定义里面就告诉你了这不叫继承.继承的意思是你可以对其进行直接的调用和修 ...

  6. luoguP2709 小B的询问 [莫队]

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  7. HZOI2019SF

    Simulation Final 坑.下午我要爆零(RP++) upd: 哈哈哈哈哈哈哈哈哈哈我真的爆零了哈哈哈哈哈哈哈哈哈哈 关于细节, T1A了但是和T3交反了哈哈哈哈哈哈哈哈哈哈 我说我真的不是 ...

  8. MyEclipse6.0中使用aptana插件,添加jquery提示功能

    MyEclipse6.0中使用aptana插件,添加jquery提示功能 第一:查看当前MyEclipse集成的eclipse的版本,, 查看路径    D:/MyEclipse 6.0/eclips ...

  9. 状态压缩dp增量统计贡献——cf1238E(好题)

    这题的状态设计非常巧妙,因为dp[S]表示的并非当前正确的值,而是维护一个中间量,这个中间量在到达末状态时才正确 当然官方的题解其实更加直观,只不过理解起来其实有点困难 /* 给定一个串s,字符集为2 ...

  10. SQL server 数据库安装

    一.安装 1.点击setup双击 2.选择第一条-安装一个新的SQLserver 3.一路点击next 4.product Key-选择第一个:试用版 5.setup Role-选择所有 6.sell ...