首页 > 其他分享 >[lnsyoj98/luoguP1403]约数研究

[lnsyoj98/luoguP1403]约数研究

时间:2024-06-13 22:13:32浏览次数:7  
标签:约数 lfloor lnsyoj98 int luoguP1403 cdot include sim

题意

原题链接
求\(1 \sim n\)的约数个数和

sol

直接算很困难,考虑换一个角度
求\(1 \sim n\)的约数个数和,等价于求\(1 \sim n\)分别是范围内几个数的约数
对于第\(i\)个值,在\(1 \sim n\)中,存在\(i, 2 \cdot i,3\cdot i,\cdots,k\cdot i\),共\(\lfloor\frac{n}{i}\rfloor\)
因此,最终的结果为$$\sum_{i=1}^n \lfloor\frac{n}{i}\rfloor$$

代码

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;
typedef long long LL;

int main(){
    int n;
    LL ans = 0;
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++ ) ans += n / i;
    printf("%lld\n", ans);

    return 0;
}

标签:约数,lfloor,lnsyoj98,int,luoguP1403,cdot,include,sim
From: https://www.cnblogs.com/XiaoJuRuoUP/p/18246856/lnsyoj98_luoguP1403

相关文章

  • 最大公约数(gcd())和最小公倍数(lcm())的c语言和c++详细解法
    最大公约数(gcd())和最小公倍数(lcm())最大公约数:定义:两个或多个整数共有的约数中最大的一个。例如:整数12和18,他们的公约数有1、2、3、6,其中最大的公约数是6。c语言解法:辗转相除法和更相减损法1、辗转相除法:思路:先求解较大的数除以较小的数的余数,再用较小的数除以前......
  • 【每日一算法】所有元素的 最大值 和 最大公约数 相等
    题目描述Silencer76 定义一个序列是好序列,当且仅当序列中所有元素的最大值和最大公约数相等。给定一个长度为 n的正整数序列 a,请找出最长的符合好序列定义的子序列,输出它的长度。输入描述:输出描述:示例一输入512321输出2示例说明:根据题意,子序......
  • C++:最小公倍数与最大公约数
    最大公约数(GreatestCommonDivisor,GCD)最小公倍数(LeastCommonMultiple,LCM)#include<iostream>//函数:计算两个数的最大公约数(GCD),这被称为欧几里得算法intgcd(inta,intb){if(b==0)returna;returngcd(b,a%b);}//函数:计算两个数的......
  • P1734 最大约数和
    变形01背包#include<bits/stdc++.h>usingnamespacestd;constintN=1010;ints;intn,m;intv[N],w[N],f[N];intaccum(intp){//预先处理约数之和 intans=0; for(inti=1;i<=p-1;i++){//因为不包括它本身因此p-1;if(p%i==0)ans+=i; ......
  • 赛克oj 1541(线性筛、约数个数)
    赛氪OJ-专注于算法竞赛的在线评测系统(saikr.com)题目描述小明在学校学了质数和合数的知识后,便想知道对于任意的一个数N,将其拆分为一个质数与一个合数相加的结果,有几种拆法?但后来想想又觉得太简单了,于是他追加了一些条件,合数要继续拆分为两个数相乘的形式才行,那么满足以上......
  • C语言---最大公约数和最小公倍数的求法
    #include<stdio.h>//欧几里得算法求的最大公约数intgcd(inta,intb){//一定要确保a>bif(a<b){inttemp=a;a=b;b=temp;//作用是创建临时变量将a和b的数值置换}while(b!=0)//当b不等于0时,继续执行循环......
  • CSP历年复赛题-P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
    原题链接:https://www.luogu.com.cn/problem/P1029题意解读:已知x,y,求有多少对p、q,使得p、q的最大公约数为x,最小公倍数为y。解题思路:枚举法即可。枚举的对象:枚举p,且p必须是x的倍数,还有p<=yq的计算:q=x*y/p,q要存在,必须x*y%p==0,且gcd(p,q)==x100分代码:#include......
  • 判断两个数的最大公约数
    ​常见点击查看代码#include<bits/stdc++.h>usingnamespacestd;intgcd(inta,intb){returnb?gcd(b,a%b):a;}intmain(){inta,b,c;while(1){cout<<"输入两个数字求最大公约数"<<endl;cin>>a>>b;......
  • 约数个数和
    首先这个约数公式要记住,具体见这篇题解然后剩下的就是比较简单的套路操作了,最后会化出来\[\sum_{d=1}^{min(n,m)}\sum_{d|x}\sum_{d|y}\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rflooru(d)=\sum_{d=1}^{min(n,m)}u(d)(\sum_{d|x}\lfloor\frac{n}{x}\rfloor)(\sum_{d|y}\lf......
  • C. 最大公约数
    C.最大公约数求\(\sum\limits_{i=1}^n\dfrac{n}{gcd(i,n)}\)。先考虑用欧拉函数解决。考虑枚举\(d=\gcd(i,n)\)的取值。式子变成\(\sum\limits_{d\midn}\sum\limits_{i=1}^n[\gcd(i,n)=d]\cdot\dfrac{n}{d}\)。对于\(\gcd(a,b)=d\),有\(\gcd(\frac{a}{d},\frac{b}{d})=1......