//貌似楼上几位都忘了重复测试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语言分解质因数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)