❶ 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;
}