描述
現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。
如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0
輸入
第一行給出測試資料組數n(0輸出
每行輸出兩個整數 a b.
其中a表示離相應測試資料最近的素數,b表示其間的距離。
樣例輸入
368樣例輸出10
5 1my solution1:普遍的做法。需要的時間稍微多一點。在oj上執行時間為72ms(空間232)。7 111 1
[cpp]view plain
copy
?#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
?#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輸...