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