首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

华为oj之质数因子

题目: 质数因子 热度指数:5143 时间限制:1秒 空间限制:32768K 本题知识点: 排序 题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为...(long ulDataInput) 输入参数: long ulDataInput:输入的正整数 返回值: String 输入描述: 输入一个long型整数 输出描述: 按照从小到大的顺序输出它的所有质数的因子...输入例子: 180 输出例子: 2 2 3 3 5 分析: 将输入的数记作n, i从2~n开始遍历去除n, 如果该数能整除n, 第一次除尽时就break, 此时记录下的i值必为质数, 将n更新为n/i,...当n不为1时继续循环, 直至n为1时整个程序结束, 此时所有的质因子输出完毕....如果不为1继续执行, 直至为1时结束程序 cout<<i<<' '; break; // 能被该质数

97730
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    筛法求质数

    筛法求质数 给定一个正整数 n,请你求出 1∼n 中质数的个数。 输入格式 共一行,包含整数 n。 输出格式 共一行,包含一个整数,表示 1∼n 中质数的个数。...数据范围 1≤n≤106 输入样例: 8 输出样例: 4 讲解: 筛法求质数是一种很快速的,在一个范围内求质数的方法,他的原理在,在一个[2,n]的范围内,我们设置一个boolean数组,标记每个数字...,最开始默认他们都是质数,为false,然后我们通过筛法把不是质数的位置标记为true。...筛法的原理就是,如果一个数字是质数,那么这个数字a,他的倍数一定不是质数,所以可以看见这循环语句for (int j = i + i; j <= n; j += i) st[j] = true; 把质数...提交代码 import java.util.*; public class Main { static int N = (int)1e6 + 3; static boolean st [] =

    4510

    求因子个数之和

    因子概念 比如一个数n,在1-n中能够满足n/x(1-n中的数)=0,那么这个数x就是n的因数,以及n/x也是n的因数,因为n=n/x*x嘛,两个都能被n整除; 1.求一个数的因子个数 a.我们可以将这个数...例如4的因子:1 2 4;9的因子:1 3 9;16的因子:1 2 4 8 16;通过观察这几个数的因子的关系,我们可以发现在根号n左右的因子是左右出现的,n=sqrt(n)*sqrt(n),只有一个小于...;//这个时候i==n/i==sqrt(n); else count += 2;//成对出现的i和n/i; } } cout << count; return 0; } 2.求a-b...:1;2的因子:1 2;3的因子1 3;4的因子1 2 4;等等,通过观察我们发现每1个数字会出现一个因子1,每2个数会出现1个因子2,每3个数会出现1个因子3..........;最大的因子是n本身,所以最后出现因子n的个数就是n/n=1;将所有出现过的因子个数相加,即可得到1-n的因子个数之和;

    7400

    Python|欧拉筛法求质数

    问题描述 我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算第 2020 个质数是多少?...这个时候就可以使用筛法来求质数,本文介绍的是欧拉筛法。其运用的原理是质数的倍数一定不是质数。因此将质数的倍数直接标记成合数,以达到筛选质数的目的。...而对此进行改进,用合数的最小质因子进行筛选来确保每个合数只被筛选一次,这就是欧拉筛法。 但是具体是怎么做到每个合数只被筛选一次,我们来看下面的代码。...return lis2 这些代码中有一个非常关键,也是确保每个合数只被筛选一次的代码: if i % prime == 0: break 当i % prime == 0时,prime就是i的质因子...而到后面的某个质数prime2去筛i * prime2的时候,就有i * prime2 == x * prime * prime2,因而prime和prime2都是i * prime2的质因子。

    1.7K20

    Numpy 求100以内质数和

    一百以内质数之和 判断是否为质数 判断一个整数是否为质数比较简单,即除了自身和1以外不可被别的数整除。不过根据数学理论证明,不用从2检查到n,到int(sqrt(n))+1即可,可以提高效率。...+1): if num % i == 0: return False return True 利用循环 简单粗暴的方式,从1循环到100,一次判断是否为质数...,若是质数,则加到ans上,若不是直接跳过。...向量化的理解,就本例子而言,循环的思想是每次取一个数,对其判断是否为质数;向量化是取这个数组为变量,直接对其所有元素判断是否为质数,然后返回一个同size的数组。...返回一个布尔型数组,比如np_arr = array([1,2,3,4]);那is_prime_vec(np_arr)返回array([False, True, True, False]),因为2,3是质数

    1.3K50

    C++经典算法题-筛选求质数

    15.Algorithm Gossip: Eratosthenes 筛选求质数 说明 除了自身之外,无法被其它整数整除的数称之为质数,要求质数很简单,但如何快速的 求出质数则一直是程式设计人员与数学家努力的课题...,在这边介绍一个着名的 Eratosthenes求质数方法。...解法 首先知道这个问题可以使用回圈来求解,将一个指定的数除以所有小于它的数,若可以 整除就不是质数,然而如何减少回圈的检查次数?如何求出小于N的所有质数?...19 20 21 N 先将2的倍数筛去: 2 3 5 7 9 11 13 15 17 19 21 N 再将3的倍数筛去: 2 3 5 7 11 13 17 19 N 再来将5的倍数筛去,再来将7的质数筛去...,再来将11的倍数筛去 ,如此进行到最后留下的 数就都是质数,这就是Eratosthenes筛选方法(Eratosthenes Sieve Method)。

    41620

    java用递归筛选法求N以内的孪生质数(孪生素数)

    本人最近读完一本书《质数的孤独》,里面讲到孪生质数,就想查一下孪生质数的分布情况。...其中主要用到了计算质数(素数)的方法,搜了一下,排名前几的都是用for循环来做的,感觉略微麻烦了一些,在比较一些还是觉得用递归筛选法来解决这个问题。...新建List,然后从第0位开始,如果后面的能被这个数整除,则从数组中移除改元素,以此类推,最后留下的就是质数(素数)。...0) list.remove(i--); } if (list.size() > ++tt) get(list, tt); } 然后再去做相邻元素差求得孪生质数...(孪生素数),贴一下求10000以内孪生质数(孪生素数)全部的代码: List list = new ArrayList(); for (int i = 2; i

    1.8K10

    【模板小程序】求小于等于N范围内的质数

    1 //筛法求N以内的素数(普通法+优化),N>=2 2 #include 3 #include 4 #include 5 using...;//这里保存了小于等于N的素数 26 } 附:素数筛法原理(具体出处记不得了,可以留言我补上) 【算法-ACM-素数】求素数的算法及其复杂度分析 关于搜寻一定范围内素数的算法及其复杂度分析...正如大家都知道的那样,一个数 n 如果是合数,那么它的所有的因子不超过sqrt(n)--n的开方,那么我们可以用这个性质用最直观的方法 来求出小于等于n的所有的素数。    ...如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质 数的倍数筛掉。      一个简单的筛素数的过程:n=30。    ...这上面的所有的素数筛选的算法都可以再进一步化为二次筛选法,就是欲求n以内的素数,就先把sqrt(n)内的素数求 出来,用已经求得的素数来筛出后面的合数。

    1.3K10
    领券