首页 > 其他分享 >筛法求约数个数

筛法求约数个数

时间:2023-09-29 20:13:30浏览次数:32  
标签:约数 筛法 get int 个数 long

推荐视频:516 筛法求约数个数

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 1e8 + 10;
int p[N], cnt;
int d[N];//d[i]记录i的约数的个数
int a[N];//a[i]记录i的最小质因子的次数
bool vis[N];
void get_d(int n) {//筛法求约数的个数
	d[1] = 1;
	for (int i = 2; i * i <= n; i++) {
		if (!vis[i]) {
			p[++cnt] = i;
			a[i] = 1; d[i] = 2;
		}
		for (int j = 1; 1LL * i * p[j]<=n; j++) {
			int m = i * p[j];
			vis[m]=1;
			if (i % p[j] == 0) {
				a[m] = a[i] + 1;
				d[m] = d[i] / a[m] * (a[m]+1);
				break;
			}
			else {//若i不能被p[j]整除
				a[m]=1;
				d[m] = d[m] * 2;
			}
		}
	}

}

int main() {
	int n;
	cin >> n;
	get_d(n);
	return 0;
}

标签:约数,筛法,get,int,个数,long
From: https://www.cnblogs.com/bu-fan/p/17737208.html

相关文章

  • 2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组
    2023-09-13:用go语言,给定一个整数数组nums和一个正整数k,找出是否有可能把这个数组分成k个非空子集,其总和都相等。输入:nums=[4,3,2,3,5,2,1],k=4。输出:True。答案2023-09-13:第一种算法(canPartitionKSubsets1)使用动态规划的思想,具体过程如下:1.计算数组nums的总和sum......
  • 根据一个数组,创建一个Segment Tree(线段树)
    线段树的特点线段树的优势线段树的构造过程(0,5)37:数组元素下标0~5的元素之和是37(0,2)21:数组元素下标0~2的元素之和是21线段树的基本数据结构(结点结构由五个分量组成)运行结果(C语言代码)递归的创建一颗线段树,然后中序、先序、后序遍历这个结点#include<stdio.h>#include<st......
  • 数学筛法
    有的时候怕忘记,写篇小博客记录一下。线性筛素数inlinevoidinit(intn){for(inti=2;i<=n;i++){if(!vis[i])prime[++cnt]=i;for(intj=1;j<=cnt&&i*prime[j];j++){vis[i*prime[j]]=1;if(!(i%prime[j]))br......
  • 在excel表格插入标黄的这列数据 实现合并单元格,并统计单元格个数?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。下图是他的原始数据和他想得到的目标数据,如下所示:需要在标黄的两行里边进行相关操作。二、实现过程这里【瑜亮老师】给了一个思路,groupby系统.漏洞......
  • # yyds干货盘点 # 在excel表格插入标黄的这列数据 实现合并单元格,并统计单元格个数?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python自动化办公的问题,一起来看看吧。下图是他的原始数据和他想得到的目标数据,如下所示:需要在标黄的两行里边进行相关操作。二、实现过程这里【瑜亮老师】给了一个思路,groupby系统.漏洞数.sum,不......
  • 取模算术运算符-应用1-判断一个数能否被另外一个数整除
    C语言中判断一个整数能否被另外一个整数整除,可以使用取模运算符%。不能直接使用两个整数相除来进行计算,因为直接使用两个整数相除,结果只会保留整数,会舍弃掉小数部分。比如使用C语言计算11/2结果为5,但是11是不能被2整除的,计算结果舍弃掉了小数部分。因此需要使用取余运算符。示......
  • 随想录Day5|242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
    随想录Day5|242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和 242.有效的字母异位词文章&视频讲解给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。1......
  • 如何实现一个数组按照另外一个数组的顺序进行排序?
    数组arr1按照arr2的顺序展示,如何实现:一、简单类型数组letarr1=[1,2,3,4,5] letarr2=[5,3,2,4,1]arr1.sort((prev,next)=>{ returnarr2.indexOf(prev)-arr2.indexOf(next)})console.log(arr1)//[5,3,2,4,1]二、复杂类型数组letarr1=[{......
  • 一个数能被整除,等价于
    能被8整除,等价于后三位可以被8整除。能被2或5整除,等价于后一位可以被2或5整除。能被4整除,等价于后两位可以被4整除。能被3或9整除,等价于各位数字之和能被3或9整除。能被11整除,等价于奇数位各位数字之和减去偶数位各位数字之和的差值能被11整除。能被7或11或13整除,等价于后三......
  • 4. 使用串口发送5个数据到电脑——基于FPGA的串口发送数据实验
    1.使用串口发送5个数据到电脑对于变化的位数(原8)位进行的设计,5个数据即40位。UART规定发送的数据位只能是6、7、8。1.1设计思路对于12位的数据,发送两个字节,高四位变0即可。例如12'h123,按照8'h23和8'h01发送。两种可能出现的情况:1.空闲状态,还没有开始发送(上一次的发送已......