編程分解質因數
1. c#編寫程序:將一個正整數分解質因數。如90=2*3*3*5
輸入90,列印輸出90=2*3*3*5
class Program
{
static void Main(string[] args)
{
int n, i;
Console.WriteLine("\nplease input a number:\n");
n=Convert.ToInt32( Console.ReadLine());
Console.WriteLine("質數分解為:");
for (i = 2; i <= n; i++) //循環被除數
{
while (n != i)
{
if (n % i == 0) //整除即可//質數
{
Console.WriteLine(i);
n = n / i; //新的除數
}
else
break;
}
}
Console.WriteLine(n);
Console.ReadLine();
}
}
Bruce
using System;
class Program
{
static void Main(string[] args)
{
Console.Write("請輸入一個整數:");
int num = Convert.ToInt32(Console.ReadLine());
string str = num.ToString()+"=";
for (int i = 2; num!=1; i++)
{
while (num % i == 0)
{
str += i.ToString() + "*";
num = num / i;
}
}
str=str.Substring(0, str.Length - 1);
Console.WriteLine("結果為:{0}",str);
Console.ReadLine();
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int intnum = 90;//輸入的數字
bool bol = true;//while循環的條件
int[] intaa = new int[intnum];//存儲分解的質因數
int arrayIndex = 0;//intaa的索引
bool bol1 = true;//判斷是否循環完畢
while (bol)//while控制整數分解質因數的整個流程
{
for (int i = 2; i <= intnum; i++)//分解整數循環(是一次次的分解)
{
if (i == intnum)
bol1 = false;//判斷是否是最後一次分解
if (intnum / i != 0)//是否除的盡
{
continue;
}
else//除的盡的話
{
intaa[arrayIndex] = i;//把質因數存儲
arrayIndex++;//存儲質因數的數組下標加1
intnum = i;//跟換當前intnum數,用來繼續分解
break;//跳出for循環
}
}
if (bol1)//如果分解完畢跳出循環
break;
}
//剩下列印你自己寫咯
}
}
}
2. C語言分解質因數
#include <stdio.h>
int main(){
int n; // 用戶輸入的整數
int i; // 循環標志
printf("輸入一個整數:");
scanf("%d",&n);
printf("%d=",n);
// n>=2才執行下面的循環
for(i=2; i<=n; i++){
while(n!=i){
if(n%i==0){
printf("鎮鬧乎%d*",i);
n=n/i;
}else
break;
}
}
printf("%d ",n);
return 0;
}
3. C語言編程 將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5
聲明一int型變數n接收鍵盤輸入並限制為正數。另一int型變數i初值賦2,用i去除n,能被整除則輸出i為質因數,並將n賦值為n/i;不能整除則i增1再去除n的新值……如此反復至n==1為止。輸出時,在n==1之前增印一個*號表示「乘」。代碼如下:
#include"stdio.h"
intmain(intargc,char*argv[]){
intn,i;
printf("Inputn(intn>0)... n=");
if(scanf("%d",&n)!=1||n<1){//輸入並限制大於0
printf("Inputerror,exit... ");
return0;
}
printf(" %d=",n);
for(i=2;n>1;){//分解質因數,i從2開始
if(n%i==0){//能被i整除則輸出因數i
printf("%d",i);
if((n/=i)>1)//未到最後一個因數則輸出一個*號
printf("*");
}
else//不能被i整除則i增1
i++;
}
printf(" ");
return0;
}
運行樣例如下:
4. 分解質因數的編程分解
實現一,此代碼因為用了long long int,為C99標准,故不可再VC6.0上運行。 #include<stdio.h>#include<math.h>intmain(){inti,b;longlongintin;/*採用64位整型,以便輸入更大的數*/freopen(F://1.txt,r,stdin);freopen(F://2.txt,w,stdout);while(scanf(%lld,&in)!=EOF){/*在F://1.txt中輸入x個數N(N>=2)以換行符或空格符隔開,當沒有輸入時循環會自動結束*/b=0;/*用於標記是否是第一個質因數,第一個質因數在輸出時前面不需要加空格*/for(i=2;in!=1;i++){if(in%i==0){薯運in/=i;b?printf(%d,i):printf(%d,i),b=1;i--;/*i--和i++使得i的值不變,即能把N含有的所有的當前質因數除盡,例如:24會一直把2除盡再去除3*/}printf(
);}}return0;}實現二
可直接在VC6.0運行。 #include<stdio.h>intm,b,c=0,j=0;inta[10];//存放質因數intfjzys(intk){inti=2;while(k>=i)//判斷k是否合格{if(k%i==0)//判斷k是否整除當前因數{a[j]=i;//存入因數k/=i;//余數i=2;//令i重新等於2j++;//計數值}else{i++;//不能整除則當前因數為非質因數}}return0;}/*用for實現上面的函數intfjzys(intk){inti=2;for(;i<=k;i++)//當因數i<=k時,實現該循環,每次循環因數i自加1for(;k%i==0;j++)//當k整除當前因數,實現該循環,每次循環下標j自加1{k/=i;//使k=k/ia[j]=i;//存入因數}return0;}解決上面的函數,無法輸出,多個相同的質因數,如90=2*3*3*5,只能輸出一個3.*/voidmain(){printf(請輸入一個整數
k=);scanf(%d,&m);fjzys(m);for(b=0;b<(j-1);b++)//*比質因數少一個{塌襪printf(%d,a[b]);printf(*);}printf(%d
,a[j-1]);//輸出最後一個質因數} @echo offcolor 1e:startclstitle 分解質因數程序set /p num=請輸入待分解的數set num0=%num%if %num% EQU 1 cls&echo 1既不是素數也不是非素數,不能分解&pause >nul&goto startif %num% EQU 2 cls&echo 2是素數,不能分解&pause >nul&goto startif %num% EQU 3 cls&echo 3是素數,不能數衫梁分解&pause >nul&goto startset numx=:loop_1if %num% EQU 1 goto resultset count=3set /a mod=num%%2if %mod% EQU 0 (set numx=%numx%×2set /a num=num/2goto loop_1):loop_2set /a mod=num%%countif %mod% EQU 0 (set numx=%numx%×%count%set /a num=num/count)if %num% EQU 1 goto resultif %count% EQU %num% set numx=%numx%×%count%&goto resultclsset /a stop=%count%*%count%if %stop% GTR %num% set numx=%numx%×%num%&goto resultset /a count+=2echo 正在計算......echo %num0%=%numx:~2%set /a wc=stop*100/numecho 正在計算%num%的因數echo 已完成計算%wc%%%if %mod% EQU 0 goto loop_1goto loop_2:resultclsset numx=%numx:~2%if %num0% EQU %numx% echo %num0%是素數,不能分解!&pause >nul&goto startecho %num0%=%numx%pause >nulgoto start