C语言程序:将一个正整数分解成若干素数的幂次方的乘积

作者&投稿:郦瞿 (若有异议请与网页底部的电邮联系)
画一个把正整数分解为素数乘积的程序流程图~

先上流程图:


相应的C语言代码:

void PrintPrime( int num ){ int factor, first=1; printf( "%d = ", num ); for( factor=2; num>1; factor++ ) { while( num % factor == 0 ) { if( !first ) printf( " * " ); else first = 0; printf( "%d", factor ); num /= factor; } } printf( "
" );}


再来简要的文字描述:

1) 标志 first 置1, 约数 factor 置初值22) 值 num 大于1吗? 若否,转步骤6; 若是, 到步骤33) num 能被 factor 整除吗? 若否, 转步骤5; 若是, 到下一步;4) 标志 first 为1吗? 若否, 输出算式中的乘号; 若是, 将first设为0。 输出 factor 的值, 将 num 除以 factor 后的商重新赋值给 num, 转步骤35) 约数 factor 递增, 转步骤26) 循环结束

/*a=1表示重头开始扫描!!!,因为我要获得下一个素因子,所以要从a=2扫描,虽然写了a=1,可是a++以后就成2了*/
/*下面是我写的代码,LZ可以参考一下*/
#include"stdio.h"
int
s[10005]={1,1};/*素数表,=0表示是素数,=1表示为非素数*/
int
p[5002],plen
=
0
;
void
mklist()
{
int
i,j;
for(i=2;i*i<=10000;++i)
if(!s[i])
for(j=i;j*i<=10000;++j)
s[i*j]=1;
for(i=2;i<=10000;++i)
if(!s[i])
p[plen++]=i;/*添加到素数集*/
}
int
split(int
n,int
fac[][2])/*返回素因子种类数*/
{
int
len
=
0;
int
i;
for(i=0;i=p[i];++i)
if(n%p[i]==0)
{
fac[len][0]=p[i];/*[][0]保存该素因子*/
fac[len][1]=0;/*[][1]保存该素因子个数*/
while(n%p[i]==0)
n/=p[i],++fac[len][1];
++len;
}
if(n!=1)
{
fac[len][0]=n;
fac[len][1]=1;
++len;
}
return
len;
}
void
main()
{
int
fac[32][2],len,i,n;
mklist();
scanf("%d",&n);/*n<=10^8*/
len
=
split(n,fac);
for(i=0;i<len;++i)
printf("%d:%d
",fac[i][0],fac[i][1]);
}

//代码如下,不明确的欢迎追问
#include <stdio.h>
#include <stdlib.h>

int main()
{
int N,n,p,e,fir;
scanf("%d", &N);
n=N;
fir=1;//判断是不是第一项。fir=1表示是第一项
printf("%d = ",n);
for(p=2;p<=N;p++)
{
e=0;
while(N%p==0)
{
N/=p;
e++;
}
if(!e) continue;
if(fir) fir=0;//第一项还没输出,这里遇到第一项,标志设为0
else printf("*");//不是第一项,则先输出'*'
printf("%d^%d",p,e);
}
printf("\n");
return 0;
}

//代码如下,不明确的欢迎追问
#include
#include
int
main()
{
int
N,n,p,e,fir;
scanf("%d",
&N);
n=N;
fir=1;//判断是不是第一项。fir=1表示是第一项
printf("%d
=
",n);
for(p=2;p<=N;p++)
{
e=0;
while(N%p==0)
{
N/=p;
e++;
}
if(!e)
continue;
if(fir)
fir=0;//第一项还没输出,这里遇到第一项,标志设为0
else
printf("*");//不是第一项,则先输出'*'
printf("%d^%d",p,e);
}
printf("\n");
return
0;
}

#include<stdio.h>
int main()
{
int x,i;
scanf("%d",&x);
for(i=2;i<x;i++)
while(x%i==0)
if(x!=0)
{
printf("%d",i);
x=x/i;
}

return 0;
}


用汇编语言编写程序,将一个包含有20个数据的数组N分成两组:正数数组...
;在数据段自行定义一个包含10个字节数据的数组M,将数组分成两个数组,正数数组P和负数数组N.data segment num dw 01h,02h,03h,04h,05h,06h,07h,10h,20h,30h nump dw ?count equ $-num data ends stack segment para stack dw 20h dup(0)stack ends code segment assume ds:data,cs:code,ss...

c语言。编程题:输入一个正整数n(大于一小于九),输出九九乘法口诀表的前...
include "stdio.h"void main(){ int a[9][9]; int i,j,x=0,n; scanf("%d",&n); for(i=0;i<9;i++) for(j=0;j<i+1;j++) a[i][j]=(i+1)*(j+1); for(i=0;i<9;i++) { for(j=0;j=n)break; } printf("\\n");...

用C++语言编写程序(不是C):输入一个正整数a,以及另外5个正整数,输出后...
include <iostream> using namespace std;int main (){ int a;cout<<"请输入正整数a"<<endl;cin>>a;int x,s=0;cout<<"请输入另外5个正整数"<<endl;for (int i=1;i<=5;i++){ cin>>x;if (x< a)s += x;} cout<<"5个整数中那些小于a的整数的和是"<<s<<endl;return 0;...

c语言,程序设计,输入一个正整数n1,然后输入第一组n1个数,将这些数按...
include "stdio.h"#include "stdlib.h"int input(char *n){int m;printf("Enter %s(int 0<%s<101)...\\n%s = ",n,n,n);if(scanf("%d",&m)==1 && m>0 && m<101){return m;}printf("Input error, exit...\\n");exit(1);}void getdata(int *x,int n){int i;printf("...

用c语言编写程序 输入一个正整数n,求1到n的数中1出现的个数
\/*用c语言编写程序 输入一个正整数n,求1到n的数中1出现的个数*\/ include"stdio.h"int count(int n){ int i,j,c=0;for(i=1;i<=n;i++){ j=i;while(j!=0){ if(i%10==1) \/*判断位数中是否有1*\/ { c++;} j=j\/10; \/*让数除以十让他原来的高位变为低位,即原来的十位...

用c语言编写一个程序,输入一个不大于32767的正整数N,将它转换成一个二...
for(i=14;i>=0;i--) \/\/寻找第一个非零的数组元素 { if(1==result[i]) break;} if(-1==i) i = 0; \/\/如果输入是0,需要把i改为0,否则若果输入0就没有输出了 for(;i>=0;i--) \/\/输出结果 { printf("%d",result[i]);} printf("\\n");} 可能没上面的写得漂亮...

C语言 输入一个正整数n(1< n ≤10),再输入n个整数,将最小值与第一个数...
include <stdio.h>int ex(int a[],int n){ int i,min,max,s1,s2,t; min=a[0]; s1=0; max=a[n-1]; s2=n-1; for(i=0; i<n; i++) { if(a[i]<min) { s1=i; min=a[i]; } if(a[i]>max) { s2=i; max=a[i...

从一个四位的正整数中取出每一位上的数字并输出,用C语言写出程序
include<stdio.h> int main(){ int n,a,b,c,d;scanf("%d",&n);a=n\/1000;b=n%1000\/100;c=n%100\/10;d=n%10;printf("%d %d %d %d\\n",a,b,c,d);return 0;}

c语言编写程序,输入一个不多于3位的正整数,要求,求出它有几位数,并逆 ...
include <stdio.h>int main(){char a[3]={0,0,0};int i,num=0,cnt=0;printf("input:");scanf("%d",&num);if(num>999) printf("input data must:0~999\\n");a[0] = (num\/100)%10;\/\/百位a[1] = (num\/10)%10; \/\/十位a[2] = num%10; \/\/个位 if(a[0]>...

求一个C语言程序:输入正整数,要求以相反数顺序输出该数。如输入1234,输...
int main(int argc, char* argv[]){ int input;int ret,num;printf("Input a int:");scanf("%d",&input);for(;;){ num=input%10;input=input\/10;printf("%d",num);if(input<10){ printf("%d\\n",input);break;} } return 0;} 例子输出。当然实际上,你要把printf的部分保存起来...

曾都区13255765206: c语言 将一小于100正整数分成若干正整数之和 使乘积最大 -
潭忽泌尿: n拆成最多几个3的总和可以组成,其余无法用3组成的除以2 也就是看n可以由多少个3和2组成 而先找出3的量再找出2的量 其想法是5可以拆成2和3且其成积比5还要大 6 3和3且其成绩比6要还大 以此类推... 但如果有数不能被3整除,又余数只剩1...

曾都区13255765206: c语言一个数分解成独立的数字 -
潭忽泌尿: void divide(int a) { int t,d, i; t = 0; i = 0; //先将a反序,储存在t中,比如a=1234,那么t=4321 do { d = a%10; a /= 10; t = t*10+d; i++; }while(a); //从个位依次输出t,即等价于最高位依次输出a do { printf("%d,",t%10); t /= 10; }while(i--); printf("\n"); } 使用i计数是为了保证类如1000这样后面为0的数字在输出的时候不会只输出前面的非零数.main()程序的输入你自己写,用scanf将数字输入到变量a中,然后调用divide(a)即得到你要的结果.

曾都区13255765206: 怎么用C语言将一个正整数分解质因数.例如,输入90,输出90=2*3*3*5 -
潭忽泌尿: #include "stdio.h" void main() {int m,i,j=0; printf("please input the number:\n"); scanf("%d",&m); for(i=2;i<=m;i++) {while(m%i==0) {j++; if(j==1) printf("%d=%d",m,i); else printf("*%d",i); m=m/i; } } } 没有用中文,怕你用的是TC,那就会出现乱码,这程序关键在于寻找质因数和输出格式的控制.

曾都区13255765206: c语言编程序题目:用whilefor编一个程序将一个正整数分解因数.
潭忽泌尿: while 语句写的:输出格式为:举例:180=2*2*3*3*5; #include"stdio.h" int main() { int n,k=2,t=1; printf("Input n="); scanf("%d",&n); while(k<=n) /*或写为for(;k<=n;) 是一样的*/ if(n%k==0) { if(t){printf("%d=%d",n,k);t=0;} else printf("*%d...

曾都区13255765206: c语言回答:输入一个不多于5位的正整数,分解出其中每一位上的数字 -
潭忽泌尿: 那按意思倒序输出也行吧!如下:#include<stdio.h> main() {int x; printf("请输入一个整数:"); scanf("%d",&x); while(x!=0) { printf("%3d",x%10); x=x/10; } printf("\n"); }

曾都区13255765206: C语言编程,函数问题,简单!!! -
潭忽泌尿: # include void main (){ int m,a[10],i=0,n,j,k,t,s=0; printf("请输入正整数:"); scanf("%d", do { a[i]=m%10; m=m/10; ...

曾都区13255765206: C语言编程 将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5 -
潭忽泌尿: 1234567891011121314151617 #include <stdafx.h>#include <stdlib.h> intmain() { inti=2,n; printf("请输入需要分解的正整数:\n"); scanf("%d",&n); printf("分解质因数的结果为:\n%d=",n); while(n>=2) { if(n%i==0) {printf("%d*",i);n/=i;} elsei++; } printf("\b \b"); system("pause"); return0; }

曾都区13255765206: C语言 将一个正整数分解质因子 例如:输入90,打印出90=2*3*3*5 -
潭忽泌尿: #include <stdio.h> int prime(int n) { int i; if(n<2)return 0; for(i=2;i<n;i++) if(n%i==0)return 0; return 1; } void main() { int n,i; printf("输入2113一5261个4102>2的正1653整回数答:"); scanf("%d",&n); printf("%d=",n); i=2; do { if(n%i==0&&prime(i)) { printf("%d*",i); n/=i; } else i++; }while(n>1); printf("\b"); printf(" \n"); }

曾都区13255765206: 随便输入一个正整数分解治因数,分解结果如:6=2*3,用C语言编写下 -
潭忽泌尿: a[i]);因子超过本身时候停止 { while(n%factor==0&&n>//%d="; } 希望你会满意 这是用devc++编译通过的,或者这个数只有本身一个因子的时候处理 { printf(" #include int main() { int m;保存因子个数 n=m; while(factor

曾都区13255765206: c语言数字拆分 -
潭忽泌尿: pow函数学过吧? 就是平方pow(a,b) a的b次方 我暂时想不到什么简单的算法 先给个复杂的#include<stdio.h> #include<math.h> int main() { int n,s=-1,d,m;scanf("%d",&n);m=n;while(m){m/=10;s++;}while(s>-1){d=n/pow(10,s);n-=d*pow(10,s);printf("%d",d);s--;}}

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网