C语言,分解质因数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,分解质因数相关的知识,希望对你有一定的参考价值。
C语言分解质因数,连续输出两个2时 就不对了,例如输入8 应该得到2*2*2. 得到是2*4 20的时候 得到是2*5
你的代码有两处错误或不完善的地方,以下是我对你的代码的修改:#include<stdio.h>
int main()
int n,i;
scanf("%d",&n);
for(i=2;i<=n;i++)//将2000换成n,也就是被除数,除数比被除数大,除来也就没有意义了
if(n%i==0)
printf("%-2d",i);
n=n/i;
i=1;//将2改为1后。i在完成一次for语句后才会进行i++,如果你设置为2的话,再加就会变成3,这就是你之前错误的原因
if(n==1) break;
以上就是我的回答,具体错误都在代码中备注出来了,如果我的回答对你有用的话,务必采纳一下!抱拳!谢了!追问
按照你改成i=1对了。谢谢了,我一开始以为是n的错误,想着n改变了,所以改成2000,题目给的最大数是2000. 非常感谢。
参考技术A 你的代码有两个问题:1.没判断i是不是质数
2.没有把n/i之后的i回到初始值2
你可以参考一下下面的代码:
#include "stdio.h"
int prime(int x)
for(int y=2;y<x-1;y++)
if(x%y==0 && x!=2)
x=0;
break;
return x;
void main()
int a;
scanf("%d",&a);
for(int x=2;x<2000;x++)
if(prime(x)==x && a%x==0)
if(prime(a)==0)
a=a/x;
printf("%d×",x);
x=1;
else
printf("%d",a);
break;
追问
非常感谢,是i的原因,没有归2。
参考技术B有这样几个问题:
声明的二维数组是aaa,但代码中应用时又变成了a,会产生a未定义错误。
int aaa[3][100000];数组太大,建议使用全局变量或动态数组;改成int a[3][1000];更好。
a[3][z]=a[1][j];这里和jj=a[3][z]*1;这里数组a都越界了。声明的a第一维是3,即0、1、2,不可能有[3]。
把这些错误改了再说。
c语言 分解质因数
c语言 分解质因数这个乘号要怎么输出?
就是*号,键盘上shift+数字键8
#include <stdio.h>void main()
int i=2,n;
scanf("%d",&n);
printf("%d=",n);
while(n>1)
if(n%i==0)
printf("%d*",i);n/=i;
else i++;
printf("\\b \\b");
追问
我的意思是如何在求出公约数的时候输出时带上乘号
要怎么编循环输出乘号?
因为不知道公约数会算出多少个,所以不可能一个一个写printf输出乘号
我是这个意思
可以解答吗
参考技术A用个flag标记是否输出了第一个数字,然后从第二个开始这样输出:
printf("*%d", i);追问能再详细一些嘛
参考技术B printf("*");以上是关于C语言,分解质因数的主要内容,如果未能解决你的问题,请参考以下文章