怎样用C++编写将一个整数分解质因数的程序

怎样用C++编写将一个整数分解质因数的程序,第1张

//貌似楼上几位都忘了重复测试i能否整除目标整数?

#include <iostream>

using namespace std;

void main()

{

long N,N2,i,t,count;

cout<<"<因式分解>"<<endl;

cout<<"本程序中N和1不视作N的因子。"<<endl;

while(1){

cout<<"请输入一个正整数N:";

cin>>N; N2=N;

count=0; t=N/2; //大于N/2的数不能成为N的因子。(本程序中N本身不算N的一个因子)

for(i=2;i<=t;i++){

if(N%i==0){

if (++count==1) cout<<"N="<<N<<"=";

cout<<i; N/=i;

if(N!=1) cout<<"×";

i--; //再次测试i是否还能成为N的因子

}

if(N==1) break;

}

if(count==0) cout<<N2<<"是质数。"<<endl;

cout<<endl<<endl;

}

}

题目:将一个正整数分解质因数。例如:输入90,打印出90=2 3 35。

正解:

1使用该数m去除以2到sqrt(m)之间的数,如果不能够整除的话,说明其本身就是质数了。

2使用该数m去除以2到sqrt(m)之间的数,如果能够整除的话,再继续循环,直到回到第一步为止。

整数i初始为2,。。。直到sqrt(num)

8

8/2=4

4/2=2

2/2=1

所以8的质因数为2 2 2

9

9/2!=0 i++;

9/3=3

3/3=1

所以9的质因数为33

27

27/2!=0 i++

27/3=9

9/3=3

3/3=1

所以27的质因数为3 3 3

100

100/2=50

50/2=25

25/2!=0 i++

25%3!=0 i++

25%4!=0 i++

25%5=0 25/5=5

5%5=0 5/5=1

所以100的质因数为2 2 55

90

90%2=0 90/2=45

45%2!=0 所以i++

45%3=0 45/3=15

15%3=0 15/3=5

5%3!=0 i++

5%4!=0 i++

5%5=0 5/5=1

所以90的质因素为2 3 35

public void zhiyinshu(int num){

int i=2;

int shang;

while(num!i=1){

if(num%i==0){

num=num/i;

print(i+"");

}else{

i++;

}

}

}

按照你的要求编写的scala语言的分解质因数程序如下

object Factor {

def main(args: Array[String]): Unit = {

println("请输入一个整数");

var n = ConsolereadInt();

if(n<=0){

val nums: List[Int] = List();

println(nums);

}else if(n==1){

val nums: List[Int] = List(1);

println(nums);

}else{

print(n+"=");

var b:Array[Int] =new Array[Int](32);

var i=0;

var j=2;

var count=0;

for(i <- 2 to n){

if(n%j==0){

b(count)=j;

count+=1;

n=n/j;

j-=1;

}

j+=1;

}

for ( x <- b ) {

if(x!=0){

    print(x+" ");

}

}

}

}

}

#include <stdioh>

#include <stdlibh>

main()

{ int n,i;

scanf("%d",&n);

printf("%d=",n);

i=2;

while(n/i!=1)

if(n%i==0){printf("%d",i);n=n/i;}

else i=i+1;

printf("%d",n);

system("PAUSe");

return 0;

}

程序运行截图:

代码:

public class Test {

public static final void main(String[] args) {

// 质数(prime number)又称素数

// 对n进行分解质因数,应先找到一个最小的质数k

Systemoutprintln("该程序实现一个正整数分解质因子");

Systemoutprintln("请输入一个正整数:");

Scanner scanner = new Scanner(Systemin);

int n = IntegervalueOf(scannernextLine());

Systemoutprintln("n = " + n);

Test localTest = new Test();

// 存储质因子

List<Integer> primeList = new ArrayList<Integer>();

localTestfactorizationIntoPrimeNumbers(n, primeList);

Systemoutprint("n = ");

for (int i = 0; i < primeListsize(); i++) {

if (i == 0) {

Systemoutprint(primeListget(i));

} else {

Systemoutprint("" + primeListget(i));

}

}

}

private void factorizationIntoPrimeNumbers(int n, List<Integer> primeList) {

// n的最小质数

int minPrime = 0;

boolean flag = true;

// 查询n中的质数

for (int i = 2; i <= n && flag; i++) {

for (int j = 2; j <= i; j++) {

if (j == i) {// j是质数

if (n % j == 0) {// j是n的质因子

minPrime = j;

flag = false;

break;

}

} else if (i % j == 0) {// j不是质数

break;

}

}

}

if (minPrime == n) {// 这个质数恰等于n,则说明分解质因数的过程已结束,打印出即可

Systemoutprintln("质因子:" + n);

primeListadd(minPrime);

} else if (minPrime != 0) {// n的最小质因子

Systemoutprintln("质因子:" + minPrime);

primeListadd(minPrime);

factorizationIntoPrimeNumbers(n / minPrime, primeList);

}

}

}

以上就是关于怎样用C++编写将一个整数分解质因数的程序全部的内容,包括:怎样用C++编写将一个整数分解质因数的程序、程序4:分解质因数、如何用scala语言分解质因数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9522865.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存