首页 > 编程语言 >【小航的算法日记】因子和

【小航的算法日记】因子和

时间:2022-11-29 10:38:46浏览次数:40  
标签:小航 int ans 因数 算法 num factor primes 日记


目录

  • ​​一、概念​​
  • ​​二、模板​​
  • ​​三、例题​​
  • ​​题:1390. 四因数​​
  • ​​解:​​

一、概念

因子和

二、模板

看例题

三、例题

题:1390. 四因数

给你一个整数数组 ​​nums​​,请你返回该数组中恰有四个因数的这些整数的各因数之和。

如果数组中不存在满足题意的整数,则返回 ​​0​​ 。

示例:

输入:nums = [21,4,7]
输出:32
解释:
21 有 4 个因数:1, 3, 7, 21
4 有 3 个因数:1, 2, 4
7 有 2 个因数:1, 7
答案仅为 21 的所有因数的和。

提示:

1 <= nums.length <= 10^4
1 <= nums[i] <= 10^5

解:

解题思路:​​暴力枚举​

AC代码:

class Solution {
public int sumFourDivisors(int[] nums) {
int ans = 0;
for(int num : nums) {
int factor_cnt = 0; // 因子个数
int factor_sum = 0; // 因子和
for(int i = 1; i * i <= num; i ++) {
if(num % i == 0) {
factor_cnt ++;
factor_sum += i;
if(i * i < num) {
factor_cnt ++;
factor_sum += num / i;
}
}
}
if(factor_cnt == 4) { // 如果因子个数等于4
ans += factor_sum;
}
}
return ans;
}
}

解题思路:​​算数基本定理​​​ + ​​Eratosthenes筛选法​

【小航的算法日记】因子和_筛选法


这里当因子数为4时:

(1) x = pq (p,q为素数) aj = 2,s = 2

【小航的算法日记】因子和_动态规划_02

(2) x = p3(p为素数) alj=3,s = 1

【小航的算法日记】因子和_动态规划_03

AC代码:

class Solution {
static int MAX = 100001;
static int[] f = new int[MAX];
static int[] primes = new int[MAX];// 质数表

public int sumFourDivisors(int[] nums) {
int ans = 0;
eth(); // 筛选素数
for(int num : nums) {
for(int i = 1; i <= primes[0]; i ++) { // 遍历质数表
int p = primes[i];
if(num % p == 0) {
int q = num / p;
if(f[q] == 0 && p != q) ans += (p + 1) * (q + 1);
if(q == p * p) ans += p*p*p + p*p + p + 1;
break;
}
}
}
return ans;
}
// Eratosthenes筛选法
void eth() {
f[0] = f[1] = 1; // 0,1不是素数
primes[0] = 0; // 这个一定要写
for(int i = 2; i < MAX; i ++) {
if(f[i] == 0) {
primes[++ primes[0]] = i; // primes[0]为计数
for(long j = (long)i * i; j < MAX; j += i) { // 防止溢出
f[(int)j] = 1;
}
}
}
}
}


标签:小航,int,ans,因数,算法,num,factor,primes,日记
From: https://blog.51cto.com/u_15895329/5894195

相关文章

  • 【小航的算法日记】最小公倍数
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1819.序列中不同最大公约数的数目​​​​解:​​一、概念推导:由算术基本定理得:则,(1)X(2)得:即:二、模板给定两个......
  • 【小航的算法日记】变量交换算法
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:面试题16.01.交换数字​​​​解:​​​​题:面试题05.07.配对交换​​​​解:​​内容摘自英雄哥,详情请看......
  • 【小航的算法日记】线性枚举(二) - 统计法入门
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1550.存在连续三个奇数的数组​​​​解:​​​​题:1295.统计位数为偶数的数字​​​​解:​​​​题:540.有......
  • 【小航的算法日记】进制转换(二) - 进阶
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:202.快乐数​​​​解:​​​​题:168.Excel表列名称​​​​解:​​​​题:171.Excel表列序号​​​​解:​​......
  • 【小航的算法日记】进制转换(一) - 入门
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:剑指Offer15.二进制中1的个数​​​​解:​​​​题:258.各位相加​​​​解:​​​​题:1290.二进制链表转......
  • 【小航的算法日记】字符串算法(二) - 字符串比较
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:剑指Offer05.替换空格​​​​解:​​​​题:面试题10.05.稀疏数组搜索​​​​解:​​​​题:1763.最长的......
  • 【小航的算法日记】线段树
    本内容取经于:https://leetcode.cn/problems/my-calendar-i/solution/by-lfool-xvpv/一、概念概念区分:线段树解决的是「区间和」的问题,且该「区间」会被修改前缀和解决的是......
  • 【小航的算法日记】字符串
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:344.反转字符串​​​​解:​​​​题:541.反转字符串II​​​​解:​​​​题:剑指Offer05.替换空格​​​......
  • 【小航的算法日记】哈希
    一、概念哈希表、哈希函数、哈希碰撞二、模板三、例题题:242.有效的字母异位词给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个......
  • 【小航的算法日记】图论
    目录​​一、概念、模板​​​​存图方式:​​​​1.邻接矩阵​​​​2.邻接表​​​​3.类​​​​算法:​​​​拓扑排序:​​​​最短路问题:​​​​1.Floyd「多源汇最短路......