ACM 素數距離

2021-07-09 02:24:27 字數 2445 閱讀 3852

描述

現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。

如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0

輸入

第一行給出測試資料組數n(0輸出

每行輸出兩個整數 a b.

其中a表示離相應測試資料最近的素數,b表示其間的距離。

樣例輸入

368

10

樣例輸出

5 1

7 111 1

my solution1:普遍的做法。需要的時間稍微多一點。在oj上執行時間為72ms(空間232)。

[cpp]view plain

copy

print

?#include

#include

int isprime(int num)  

int main()  

while(!isprime(numdown)&&numdown>0)//邊界條件,否則不能通過 

deltup = numup-num;  

deltdown = num-numdown;  

if(numdown==0)//特殊情況:左邊沒有找到 

printf("%d %d\n",numup,deltup);  

else

if(deltup>=deltdown)//輸出距離小的, 相等則左 

printf("%d %d\n",numdown,deltdown);  

else

printf("%d %d\n",numup,deltup);  

}  }  

//system("pause");

return 0;  

}  

#include#includeint isprime(int num)

int main()

while(!isprime(numdown)&&numdown>0)//邊界條件,否則不能通過

deltup = numup-num;

deltdown = num-numdown;

if(numdown==0)//特殊情況:左邊沒有找到

printf("%d %d\n",numup,deltup);

else if(deltup>=deltdown)//輸出距離小的, 相等則左

printf("%d %d\n",numdown,deltdown);

else

printf("%d %d\n",numup,deltup);

}} //system("pause");

return 0;

}

my solution2:花了好一會時間才完成,用篩選法建立素數表。用空間換時間。在oj上執行時間為40ms(空間4136)。

[cpp]view plain

copy

print

?#include

#include

#include

#define max 1000010

int table[max];  

//篩選法建立素數表: 0為素數, 1為非素數 

void buildprimetable()  

int main()  

}  //system("pause");

return 0;  

}  

#include#include#include#define max 1000010

int table[max];

//篩選法建立素數表: 0為素數, 1為非素數

void buildprimetable()

}//system("pause");

return 0;

}

總結

1. 要充分考慮邊界情況

對於第一種解法,考慮當輸入的數為1時,向下到0就越界了,此時只能向上為2。

對於第二種解法,考慮當輸入為999999時,此時最近的素數為1000003。所以定義table的大小時要到1000010最好。

2. 可以合併的要合併,不能合併的單獨出來

最開始寫的時候,把左右距離相等的情況給分出來了寫出if(deltup==deltdown&&num==numdown)。完全沒有必要。

該提前的要提前。如果是素數,後面的可以全部不用判斷。

3. 關於篩選法建立素數表

以前不知道有這個方法,確實很方便。就是用已知的素數,從前往後相加進行填充。

其他解法:

素數距離問題(素數表)

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入 第一行給出測試資料組數n 0輸...

素數距離問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料組數n 0輸...

素數距離問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料組數n 0輸...