當前位置:首頁 » 編程語言 » C語言輸出質因數的積
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

C語言輸出質因數的積

發布時間: 2023-01-02 19:42:08

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;

}

❷ 輸出2-100內每項的質因子乘積。 C語言

#include<stdio.h>
intmain()
{
inti,n,t,flag;
for(i=2;i<=100;i++)
{
n=2;
t=i;
flag=0;
printf("%d=",t);
while(t!=1)
{
if(t%n==0)
{
if(flag)printf("*");
elseflag=1;
printf("%d",n);
t/=n;
n=2;
}
elsen++;
}
}

return0;
}

❸ c語言把一個整數寫成質因數的乘積形式 怎麼寫程序如242=2*11*11 限於for,if,switch,while語句

#include<stdio.h>
void main()
{
int i,j,N;
scanf("%d",&N);
j=N;
printf("%d=",N);
for(i=2;i<N;i++)
{
if(j%i==0)
{
if(j==N)
printf("%d",i);
else
printf("*%d",i);
j=j/i;
i--;
}
}

}

經過測試的

❹ 求助c語言編程題目質因數分解

因為使用for循環從小到大判斷其因數,而質數在由其組成的合數前面,所以如果i是n的因數,那麼i一定是質因數,而且質因數會從小到大輸出.

具體編程時,我們還應該使用n=n/i;,使for循環能快速滿足終止條件,節省運行時間.用i--;,處理有多個重復質因數的情況.用count來統計相同質因數的個數.

具體的解釋見注釋

#include<stdio.h>

int main(){

//n輸入的要分解的數,m前一個質因數,i循環變數

//flag第一個輸出的質因數的標志變數,count統計有幾個相同的質因數

int n,m,i,flag,count;

while(scanf("%d",&n)==1){//輸入一個數n,直到一次輸入的參數個數不等於1

flag=1;//第一次輸出的質因數的標志為1

m=0;//前一個質因數賦初值為0

count=1;//相同質因數個數為1

for(i=2;i<=n;i++){ //for循環從2到n

if(n%i==0){//如果n能被i整除,則i為質因數

if(m==i){//如果質因數與前一個質因數相同

count++;//相同質因數個數加一

}else{//如果質因數與前一個質因數不同

if(flag==1){//如果是第一次輸出

printf("%d",i);//輸出第一個質因數

flag=0;//把標志變數置0,後面輸出的質因數都不是第一個了

}else{//不是第一次輸出

if(count==1){//有一個不相同的質因數輸出

printf("*%d",i);//輸出不相同的質因數

}else{//有多個相同的質因數輸出

printf("^%d",count);//輸出相同的質因數個數

count=1;//重置相同質因數個數為1

printf("*%d",i);//輸出新的不同的質因數

}

}

}

m=i;//把當前質因數賦給存儲前一個質因數的變數m

n=n/i;//改變循環范圍n為n/i後的值

i--;//i減一,以處理有多個相同質因數的情況

}

}

if(count>1) printf("^%d",count);//如果有多個相同質因數,輸出其個數

printf(" ");//換行

}

return 0;

}

❺ 關於c語言「將一個正整數分解成質因數的乘積」程序的問題

/*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<plen&&n>=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\n",fac[i][0],fac[i][1]);
}