㈠ c语言将一个正整数分解质因数,望高手帮我详细解释一下程序
1、首先打开vc6.0, 新建一个vc项目,添加头文件。
㈡ c语言质因数分解;
#include<stdio.h>
main()
{inttemp,n,i1,m;
intdata,j,i;
inta[100],b[100];
m=1;
j1=1;
while(scanf("%d",&data)!=EOF)
{j=0;i=2;
while(data>1)
{if(data%i==0)
{a[j]=i;
j=j+1;
data/=i;
}
elsei++;
}
n=j-1;
for(i=0;i<n;i++)
{i1=1;
for(j=i+1;j<=n;j++)
{if(a[i]==a[j])
i1=i1+1;
elsebreak;
}
if(i1!=1)
{printf("%d^%d",a[i],i1);
}
else
printf("%d",a[i]);
i=i+i1-1;
if(a[i]!=a[n])
printf("*");
}
if(a[n]!=a[n-1]||n==0)
printf("%d",a[n]);
printf(" ");
j1=j1+1;
}
}
这段代码是在你写的代码基础上改的,首先不需要对a数组重新排序,因为求出的a数组原本就是一组从大到小的数组,i=2要放在while循环里面,每次重新输入数值重置i的值,
不能用i<n来判断是否该输出最后*,在循环里i的值会一直小于n,因为前面for循环里已经定义了在i<n的情况下进行循环,还有在最后应该考虑数组只有一个数的情况
㈢ 用C语言怎样做出分解质因数啊,请高手们帮个忙吧。
#
include
"stdio.h"
int
isPrime(int
a)
{
/*判断a是否是
质数
,是质数返回1,不是质数返回0*/
int
i;
for(i=2;i<=a-1;i++)
if(a
%
i
==
0)
return
0;
/*不是质数*/
return
1;
/*是质数*/
}
void
PrimeFactor(int
n)
{
/*对参数n分解
质因数
*/
int
i;
if(isPrime(n))
printf("%d
",n);
else
{
for(i=2;i<=n-1;i++)
if(n
%
i
==
0)
{
printf("%d
",i);
/*第一个因数一定是质因数*/
if(isPrime(n/i))
{
/*判断第二个因数是否是质数*/
printf("%d
",n/i);
break;
/*找到全部
质因子
*/
}
else
PrimeFactor(n/i);
/*递归地调用PrimeFactor
分解n/i
*/
break;
}
}
}
main()
{
int
n;
printf("Please
input
a
integer
for
getting
Prime
factor\n")
;
scanf("%d",&n);
PrimeFactor(n);
/*对n
分解质因数
*/
getche();
}
㈣ 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;
}
㈤ c语言,输入一个正整数,将这个正整数分解质因数
具体如下:
#include<stdio.h>
void main()
{int i,n;
printf("input the n:");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<n;)
{if(n%i==0)
{printf("%d*",i);
n=n/i;}
else i++;
}printf("%d",n);
}
㈥ c语言 分解质因数
代码:
#include<stdio.h>
intmain()
{
inta[6555],i,j,t=1;
a[0]=2;
for(i=3;i<65540;i+=2)
{
for(j=2;j*j<=i;j++)
{
if(i%j==0)
break;
}
if(j*j>i)
{a[t]=i;t++;}
}
intn,n1,n2,x,y,f=0;
while(scanf("%d",&n)!=EOF)
{
x=0;
for(i=0;a[i]<=n;i++)
if(a[i]==n)
{
printf("%d=1*%d ",n,n);
x=1;
}
if(x==0){
printf("%d=",n);
for(i=0;a[i]<n;i++)
{
if(n%a[i]==0)
{
n=n/a[i];
printf("%d*",a[i]);
i--;
}
}
printf("%d ",n);}
}
return0;
}
思路就是求出所有素数,然后从素数 2 开始,找可以把n整除的素数,(每次都从素数2开始找,而且找到后要更新n的值)
㈦ C语言,分解质因数
你的代码有两处错误或不完善的地方,以下是我对你的代码的修改:
#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;
}
}
}
}
以上就是我的回答,具体错误都在代码中备注出来了,如果我的回答对你有用的话,务必采纳一下!抱拳!谢了!
㈧ C语言经典算法:如何较快的分解质因数
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。初级算法:#include
#include
#include
int
main()
{
int
n,i;
scanf("%d",&n);
printf("%d=",n);
for(i=2;i
㈨ C语言分解质因数
这样注释的已经很好了啊
if(m%k!=0),说明还没找到因数,每次都是从2开始,逐渐递增,来找因数的
else,else部分,说明已经找到了因数,找到因数以后,先把因数打印出来,然后让m等于被除后的数,让k=2,也就是从2开始,继续递增找其他的因数啊
举个例子,你就明白了,比如15,你要对它进行分解质因数,该怎么做呢
先让k=2,发现15%2!=0了,说明2不是它的因数,让k++
k=3的时候,发现15%3==0了,说明3是它的一个因数,打印出3,让m=15/3=5,让k=2
5%2!=0,5%3!=0,5%4!=0,说明2,3,4,都不是5的因数,k继续自加
k=5,5%5==0了,说明5是5的因数,所以,打印5,m=5/5=1,k=2,这时,就会退出for循环了
逐行分析,见下面:
if(m%k!=0) //m不能被k整除,说明k不是m的因数
{
k++; //就让k自加1,判断下一个数是不是m的因数
}
else //m不能被k整除,说明k是m的一个因数
{
printf("%d*",k); //把这个因数k,打印出去
m=m/k; //从m中把因数k去掉,如果不去掉,下一个又会找到因数k的,那样就不对了
k=2;//让k重新等于2,也就是重新从2开始找m的因数
}
㈩ c语言质因数分解题目怎么做
#include<stdio.h>
#include<math.h>
int main() {
long long n,i,j,k;
while(~scanf("%ld",&n)) {
k=1;
for(i=2; i<=sqrt(n); i++) {
j=0;
if(n%i==0) {
if(k)k=0;
else printf("*");
printf("%ld",i);
while(n%i==0) {
j++;
n/=i;
}
if(j>1)printf("^%ld",j);
}
}
if(n>1)
if(k)printf("%ld",n);
else printf("*%ld",n);
printf("\n");
}
return 0;
}