#30070: c 有更好的解法嗎


jojojo22845@gmail.com (lu)

學校 : 國立臺灣大學
編號 : 190663
來源 : [140.112.229.2]
最後登入時間 :
2023-06-07 10:38:04
a010. 因數分解 | From: [163.32.125.90] | 發表日期 : 2022-04-26 11:55

//因數分解
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int element(int a)
{
for(int i = 2; i <= a; i++){
if(a % i == 0){
return(i);
break;
}
}
}

int main()
{
int num = 0; //欲分解的數
int *ary = 0; //pointer to 因數陣列
int *count = 0; //紀錄因數次數
int length = 0; //陣列長度
scanf("%d",&num);
while(num != 1)
{
if(length == 0 || (element(num) != ary[length-1]))
{
ary = (int*)realloc(ary, sizeof(int) * (length + 1));
count = (int*)realloc(count, sizeof(int) * (length + 1));
ary[length] = element(num);
count[length] = 1;
length ++;
}
else
{
count[length-1] ++;
}
num = num / element(num);
}


for(int i = 0; i <length; i++)
{
printf("%d", ary[i]);
if(count[i] > 1 )
{
printf("^%d",count[i]);
}
if(count[i] = 1 && i != (length - 1)) printf(" * ");
}
}

 
 
#30072: Re: c 有更好的解法嗎


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a010. 因數分解 | From: [27.246.161.196] | 發表日期 : 2022-04-26 15:18

1.
for(int i = 2; i <= a; i++){
2.
ary = (int*)realloc(ary, sizeof(int) * (length + 1));
count = (int*)realloc(count, sizeof(int) * (length + 1));
3.
if(count[i] = 1 && i != (length - 1)) printf(" * ");
 

 
  1. 這裡可以只找到平方根,如果沒找到直接回傳a,會比較快一點
  2. 網路上一般不建議這樣寫,因為realloc可能會失敗(不過只是解題應該還好?)
  3. count[i] = 1感覺是多餘的?
 
#30102: Re: c 有更好的解法嗎


jojojo22845@gmail.com (lu)

學校 : 國立臺灣大學
編號 : 190663
來源 : [140.112.229.2]
最後登入時間 :
2023-06-07 10:38:04
a010. 因數分解 | From: [163.32.125.90] | 發表日期 : 2022-04-29 10:41

1.
for(int i = 2; i <= a; i++){
2.
ary = (int*)realloc(ary, sizeof(int) * (length + 1));
count = (int*)realloc(count, sizeof(int) * (length + 1));
3.
if(count[i] = 1 && i != (length - 1)) printf(" * ");
 

 
  1. 這裡可以只找到平方根,如果沒找到直接回傳a,會比較快一點
  2. 網路上一般不建議這樣寫,因為realloc可能會失敗(不過只是解題應該還好?)
  3. count[i] = 1感覺是多餘的?
  1. 謝謝!! 質數的性質沒有考慮到!

  2. hmmm那會建議馬上輸出嗎 就不用再另建陣列了 好像會比較省空間,我沒有考慮到realloc可能會失敗
  3. 剛剛試了一下 真的是多餘的 謝謝!
 
ZeroJudge Forum