❶ c语言编程:合数分解
#include<stdio.h>
intmain()
{
inti=2,n,m=0;
scanf("%d",&n);
while(i<=n)
{
if(n%i==0)
{m++;n/=i;}
else
{
if(m>1)printf("%d",i);
m=0;i++;
}
}
return0;
}
//运行示例:
❷ C语言 特殊合数问题求解不对……
这个主要是对合数的分解求和函数zyz有问题,比如求zyz(8),会返回2,而实际应该是2*2*2,和为6,稍微改了一下,你测一下是否符合你的要求?
int zyz(int a)
{
int i,sum=0;
while(heshu(a))
{
for(i=2;i<=a;i++)
if(a%i==0)
{
if(i<10)
sum+=i;
else
sum+=he(i);
a=a/i;
break;
}
}
if(!heshu(a))
{
if(a<10)
sum+=a;
else
sum+=he(a);
}
return sum;
}
❸ C语言求合数的质因数分解,并输出出现最多的质因数
这个程序写得太过复杂了,完全可以简单一点的。具体的算法是从2开始尝试找出给你写的数所有的质因数,并统计每一个质因数出现的次数。分别保存在两个数组中。
等到全部分解完成后,再检查其中出现次数最多的,进行输出就可以了。
下面是我的程序和运行结果:
#include <stdio.h>
int main()
{ int i,j,k=0,n,a[50],b[50]= {0};
scanf("%d",&n);
for(i=2; i*i<=n; i++)
{ for(j=1; n%i==0; n/=i)
{ if(j)
{ a[k]=i;
b[k]=1;
j=0;
}
else b[k]++;
}
if(!j)k++;
}
if(n>1)
{ a[k]=n;
b[k++]=1;
}
for(i=1,j=0; i<k; i++)
if(b[i]>=b[j])j=i;
printf("%d
",a[j]);
return 0;
}
❹ c语言输入一个合数,使分解,素数则无法运行怎么弄
由数学基本定理可知:任何一个大于1的非素数整数(即合数)都可以唯一分解成若干个素数的乘积。编写程序,从控制台读入一个合数(合数的大小不会超过int数据类型表示的范围),求这个合数可以分解成的只出现一次的素数。例如合数1260分解成素数乘积为:22335*7,2和3出现两次,5和7出现一次,所以求得的结果为5和7。
【输入形式】
从控制台输入一个合数。
【输出形式】
在标准输出上按照由小到大的顺序输出分解后的只出现一次的素数,各素数之间以一个空格分隔,最后一个素数后也可以有一个空格。若没有只出现一次的素数,则什么都不输出。
【输入样例】
6154380
【输出样例】
5 29 131
【样例说明】
输入的合数为6154380,其分解成的素数乘积为:2 *2 *3 *3 *3 *3 *5 *29 *131,其中2出现两次,3出现4次,5、29和131只出现一次,所以只输出5、29、131。
偶然间想起来这个题目,如果我们没有去分析合数的性质直接去做的话,就会很麻烦。
如果没有分析合数,我们得先构造一个素数的数列,然后再循环找出能整除的素数,再去掉这个商和的重复数,再输出。
这时分析一下这个合数,题目中很明确的告诉我们这个是被唯一整除的,
然后所有的整数都可以用素数的乘积的形式表示,也就是说我们这时候没有必要去构造一个素数的数组,只要我们从2开始往返循环就可以完成素数的构造。这时这个题目的输出输入我们也要观察一下,很明显这个输出
22333*……从小到大排列,也就是说如果存在重复素数,那么必定相邻。然后在偶然启发下代码`
❺ 关于C语言,合数分解问题
#include <stdio.h>
#include <math.h>
int main()
{
int n=2,i;
while(n<=1000)
{
i=2;
int flag = 1;
while(i<=sqrt(n))
{
if(n%i==0)
{
if(flag)
{
printf("%d是合数,可分解如下: \n", n);//
flag = 0;
}
printf("%d = %d * %d ",n, i,n/i);
}
i++;
}
if(!flag)
{
printf("\n");
}
n++;
}
return 0;
}
❻ c语言编程:合数分解
#include<stdio.h>
intmain()
{inti,k,n;
scanf("%d",&n);
for(i=2;i*i<=n;i++)
if(n%i==0)
{k=0;
while(n%i==0){k++;n/=i;}
if(k>1)printf("%d",i);
}
printf("
");
return0;
}
❼ C语言程序设计 输入一个合数进行分解,合数大于1小于10^11,按递增输出合数的质(素)因子。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
intIsPrime(intm){
inti,flag=1;
if(m<2)return0;
if(m==2||m==3)return1;
for(i=2;flag&&i<sqrt(m);i++){
if(m%i==0)flag=0;
}
returnflag;
}
voidDissociation_Prime(intn){
inti,flag=1;
printf("%d=",n);
for(i=2;i<n;++i){
if(IsPrime(i)&&(n%i==0)){
if(flag){
printf("%d",i);
flag=0;
}
elseprintf("×%d",i);
n/=i;
--i;
}
}
if(flag==0)printf("×%d ",n);
elseif(n)printf("%d ",n);
}
intmain(){
inti;
for(i=12;i<=30;i++)
Dissociation_Prime(i);
return0;
}