题——质数、因子

质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除,即不再有其他的因数。

如下:

判断思路:

对正整数n,如果用2到 之间的所有整数去除,均无法整除,则n为质数。(因为 i*i= n 时, i 时中间的那个因子)

#include <iostream>
#include <vector>
using namespace std;

int main()
{
  int number, count=0/*因子数*/;
  vector<int> primes;
  cin >> number;
  for(int i=2; i*i<=number; i++)  //利用for(int i=2; i<=number; i++)求出的因子数排好了序
  {
    if(number%i == 0)
    {      

        count = count+2;
      primes.push_back(i);
      primes.push_back(number/i);  //这个里面的因子数没有排序
      cout << number << ‘=‘ << i << ‘*‘ << number/i << ‘ ‘;

    }
  }
  cout << endl;
  cout << "因子数:" << count << endl;  

  for(int i=0; i<primes.size(); i++)
  {
    cout << primes[i] << ‘ ‘;
  }
  cout << endl;

  system("pause");
  return 0;
}



一种更快的判断方法:

bool isPrime(unsigned long n) {

    if (n <= 3) {

        return n > 1;

    else if (n % 2 == 0 || n % 3 == 0) {

        return false;

    else {

        for (unsigned short i = 5; i * i <= n; i += 6) {

            if (n % i == 0 || n % (i + 2) == 0) {

                return false;

            }

        }

        return true;

    }

}

时间: 2024-10-12 02:26:40

题——质数、因子的相关文章

欧拉项目第三题之最大质数因子

13195的质数因子有5,7,13和29. 600851475143的最大质数因子是多少? 这里可以肯定的是:1.数字很大,绝对不能暴力.2.如果这是一到OJ题,那么我们的目的就是尽量缩小这个数,减少计算量. 我们都知道,任何一个合数都是可以由他的所有质因素相乘得到的,比如15=3*3*3*3*3,12=2*2*3,60=2*2*3*5.(这些数都是我随便想的),好的,我们先看一个比较小的数60,现在我们要找它的最大质因子,我们可以从最小的奇数开始枚举(当然要先枚举2这个特殊的质数,除此之外的偶

质数因子

题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ) 详细描述: 函数接口说明: public String getResult(long ulDataInput) 输入参数: long ulDataInput:输入的正整数 返回值: String 输入描述: 输入一个long型整数 输出描述: 按照从小到大的顺序输出它的所有质数的因子,以空格隔开 输入例子: 180 输出例子: 2 2 3 3 5 import java.util

1-6质数因子

题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ) 最后一个数后面也要有空格 详细描述: 函数接口说明: public String getResult(long ulDataInput) 输入参数: long ulDataInput:输入的正整数 返回值: String 输入描述: 输入一个long型整数 输出描述: 按照从小到大的顺序输出它的所有质数的因子,以空格隔开.最后一个数后面也要有空格. 输入例子: 180 输出例子:

分解质数因子

var m,b,c=0,j=0; var arr=[]; function fjzys(k){ var i = 2; while(k>=i) { if (k%i == 0) { arr[j] = i; k/=i; i=2; j++; } else { i++; } } } fjzys(100); //求100的质数因子 for(var b = 0; b<(j-1); b++) { console.log(arr[b]); console.log('*'); } console.log(arr[

14:质数因子PrimeNum

14:题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ) 详细描述: 函数接口说明: public String getResult(long ulDataInput) 输入参数: long ulDataInput:输入的正整数 返回值: String 输入描述:输入一个long型整数 输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开 输入例子:180 输出例子:2 2 3 3 5 package prctice01

【华为机试练习】质数因子

题目描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )输入描述:输入一个long型整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开.最后一个数后面也要有空格. 解法(C语言版): #include<stdio.h> #include<math.h> int isprime(int n) { int k, i; k = (int)sqrt(n); for(i = 2; i <= k; ++i) { i

2015编程之美初赛第三题质数相关

1.解题思路 按题要求,输入数据后先进行是否有两两相同的数据的判断,接着进行从小到大的排序,由于是求质数无关,则集合中任何一对数都不能质数相关,本人采用顺序遍历,将集合中每个数字分为必须包含和必须排外两种情况遍历,首先集合第一个数必须包含,且作为子集中第一个元素,由于是有序数据,只需从集合第二个数遍历起,对加人子集的每个数做质数相关判断(需要遍历一遍),若与子集每个数都质数无关,则将该数纳入该子集,直到遍历完集合后续所有数据,完了统计子集大小:再来第二遍遍历,这是最外循环从大集合第二个数据起,此

【401】Python 求合数的所有质数因子

对于这样的一个题目来说,出看来,可能会想到判断是否为质数,但其实并不需要. 只要按照从2开始遍历,只要遇到可以整除的就是想要的质数,理由是,如果遇到合数的话,那么在此之前一定会遇到这个合数的质因子,因此不会存在这种情况. 另外就是遍历的后边界,其实随着number的质因子被找到,因此number在逐渐减小,因此之后的遍历中是包括其自身的,因此需要 number+1 代码1:这样的方法尤其适用于大数字,否则会有很多无用的计算 def all_divisors(number): nb_list =

华为机试测试- 质数因子

根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积. import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); Lo