编程分解质因数
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