5kyu k-Primes
5kyu k-Primes
题目背景:
A natural number is called k-prime if it has exactly k
prime factors, counted with multiplicity.
Task:
Complete the function count_Kprimes
(or countKprimes
, count-K-primes
, kPrimes
) which is given parameters k, start, end
(or nd
) and returns an array (or a list or a string depending on the language - see “Solution” and “Sample Tests”) of the k-primes
between start (inclusive)
and end (inclusive)
.
Second Task (puzzle):
Given positive integers s, a, b, c
where a
is1-prime
, b
is 3-prime
, c
is 7-prime
, find the total number of solutions where a + b + c = s
. Call this function puzzle(s)
.
题目分析:
本道题主要是如何计数素因子的个数,关于计数素数因子个数的方法,存在非常经典的因子分解的模板思路,先附上计数素因子个数的函数:
int KPrimes::count_primes(long long num){long long i = 2;int cnt = 0;while( i * i <= num ) {while( num % i == 0 ) {num /= i;cnt++;}i++;}if ( num != 1 ) cnt++;return cnt;
}
最终AC的代码:
class KPrimes{public:static std::vector<long long> countKprimes(int k, long long start, long long end);static int puzzle(int s);static int count_primes(long long num);
};int KPrimes::count_primes(long long num){long long i = 2;int cnt = 0;while( i * i <= num ) {while( num % i == 0 ) {num /= i;cnt++;}i++;}if ( num != 1 ) cnt++;return cnt;
}std::vector<long long> KPrimes::countKprimes(int k, long long start, long long end){if ( start > end || k < 1 ) return {};std::vector<long long> res;for ( long long i = start; i <= end; i++) {if ( count_primes(i) == k) res.push_back(i);}return res;
}int KPrimes::puzzle(int s){long long s1 = (long long)s;std::vector<long long> one_prime = countKprimes(1, 2, s1);std::vector<long long> three_prime = countKprimes(3, 8, s1); // 2 * 2 * 2 = 8std::vector<long long> seven_prime = countKprimes(7, 128, s1);int res_cnt = 0;for ( int cnt_1 = 0; cnt_1 < one_prime.size(); cnt_1++ ) {for ( int cnt_3 = 0; cnt_3 < three_prime.size(); cnt_3++ ) {long long sum = one_prime[cnt_1] + three_prime[cnt_3];if ( std::find(seven_prime.begin(), seven_prime.end(), s1 - sum) != seven_prime.end() ) res_cnt++;}}return res_cnt;
}
5kyu k-Primes相关推荐
- 找出前50个素数,构成素数表
import java.util.Scanner;public class Hello {private static Scanner in;public static void main(Strin ...
- 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 素数的判断,以及素数的遍历
去除偶数之后 从3到X-1,每次加 2 public static void main(String[] args) {// TODO Auto-generated method stubScanne ...
- 2020 年最全 Python 面试题汇总 (五)
@Author:Runsen 文章目录 81.逆序对 82.手写一个栈 83.有效的扩号 84.扩号的生成 85.最长有效括号 86.比特位计数问题 87.判断给定的数是否为丑数 88.找出第 n 个 ...
- LightOJ1298 One Theorem, One Year(DP + 欧拉函数性质)
题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1298 Description A number is Almost- ...
- LeetCode 313. 超级丑数(动态规划)
1. 题目 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13,1 ...
- 素数筛选法(埃氏筛 欧拉筛)
质数筛选法 文章目录 质数筛选法 前言 一.埃氏筛 O(nloglogn)O(nloglogn)O(nloglogn) 二.欧拉筛O(n)O(n)O(n) 总结 前言 当需要大范围内的素数时,例如1e ...
- 利用数组求前n个质数
我的算法思想和实现方式都在代码和注释当中呢,这样的方式确实使算法复杂度降低一个等级,很好啊. #include <stdio.h> #include <time.h>/*** ...
- 素数的几种求法(java)
笔记 1.素数,前50个数内是素数的数 已知x=2为素数,那么与2成倍数关系的数都不是素数,所以将他们划掉: 将x的值一次增加,只要是倍数,就不是素数. import java.util.Scanne ...
- 【算法专题】卡特兰数
卡特兰数 1. 概述 卡特兰数:首先这个一个数,很多问题的结果都是卡特兰数,比如2016年全国三卷数学选择题压轴题让求解的就是卡特兰数,问题如下: 首先是结论:卡特兰数为: C 2 n n n + 1 ...
最新文章
- 百年科技的历史回顾与哲学反思
- 001_Spring概述
- [入门]理想的小白程序员成长曲线
- look look C#7
- ad中装配图如何导出_如何把endnote中的research note和title等一起导出成表格或者txt?...
- 如何绘制四线3格拼音
- 安全公司整理-方便找工作
- jar(jar -cvf)包压缩包含绝对路径问题
- Tracup体验报告
- java实现简单控制台出租房屋管理系统
- 射频单刀双掷开关常见结构
- Java网络编程:TCP实现群聊私聊代码
- 2023款MacBook Pro M2参数配置怎么样 性能怎么样 尺寸重量多少?
- 软件界面设计必备的色彩搭配技巧
- 浏览器 snippets
- final class java_Java 中常见的 final 类
- 通用gadget详解
- 新计算机显卡声音大,刚买回来的电脑主机噪音大怎么办
- ESP8266-Arduino编程实例-ADXL345三轴加速计驱动
- python not defined怎么解决_数据量太大?散点图装不下怎么办?用Python解决数据密度过大难题