我正試圖在用戶輸入數字後找到下一個素數,而且我必須以帕斯卡形式進行。我甚至不知道該從哪裏開始,有誰能幫助我?找到pascal中的下一個素數
program PRIME;
uses crt;
var
C, N : INTEGER;
const
A=2;
Begin PS:
Writeln ('enter your number') ;
Read (N);
begin
Writeln(
readln;
End.
我正試圖在用戶輸入數字後找到下一個素數,而且我必須以帕斯卡形式進行。我甚至不知道該從哪裏開始,有誰能幫助我?找到pascal中的下一個素數
program PRIME;
uses crt;
var
C, N : INTEGER;
const
A=2;
Begin PS:
Writeln ('enter your number') ;
Read (N);
begin
Writeln(
readln;
End.
兩個提示:
如果輸入的號碼是否< 2然後接下來的素數是2。
如果輸入的號碼是否> = 2,那麼接下來的素數是奇數大於輸入的數字,小於輸入的數字的兩倍(伯特蘭的公設)。
不,我們不會爲您編寫您的Pascal代碼。
解決這個問題的第一步是弄清楚如何手工完成。從維基百科:
一個簡單但速度慢的方法來驗證給定數字的素數 n稱爲審判分裂。它包含測試n是否爲 倍數2和sqrt {n}之間的任何整數。
所以,如果你給6,你會先測試數字7,看它是否是素數。通過將所有整數從2除到7的平方根(2.645751311),測試7是否爲素數。所以你只需要測試7是否可以被2整除。如果用戶輸入14,你首先要測試15是否可以被2到15的平方根(3.872983346)的整數數字整除。所以你會測試看15是否可以被2或3整除。
有兩個循環涉及到。一個是重複加1到輸入數字 - 也就是說 - 如果他們輸入10,則測試11的素數,然後12,然後13,然後14,然後15等。另一個循環將所有整數在2和當前數字的平方根被檢查爲最初。將它除以2,是否有餘數?除以3,是否有餘數?除以4,是否有餘數?等等。每次你得到一個沒有餘數的分區時,你可以停止這個循環,因爲你知道你沒有找到一個素數,需要增加數值並重新計算你的平方根並重新開始分割。
在Free Pascal中,它看起來是這樣的:
program NextPrimeNumber;
uses
Math;
var
user_input : integer;
next_prime : integer;
function CalculateNextPrimeNumber(value : integer) : integer;
var
next_prime_not_found : boolean = true;
square_root : integer = 0;
i : integer = 0;
remainder : integer = 0;
result : integer = 0;
successful_divisions : integer = 0;
begin
(* loop through the numbers above our value till we find one that
is not divisible *)
while next_prime_not_found do
begin
successful_divisions := 0;
value := value + 1;
square_root := trunc(sqrt(value));
(* try and divide by all the numbers between 2 and the square root of
out current number (square root value truncated
to next lowest integer) *)
for i := 2 to square_root do
begin
DivMod(value,i,result,remainder);
if remainder = 0 then
begin
successful_divisions := successful_divisions + 1;
(* this is a non-prime number, so quit trying more divisions *)
break;
end;
end;
if successful_divisions = 0 then
(* we found a prime so stop looking by setting the value
the while loop is checking to false *)
next_prime_not_found := false;
end;
CalculateNextPrimeNumber := value;
end;
begin
writeln('enter a postive number');
readln(user_input);
next_prime := CalculateNextPrimeNumber(user_input);
writeln('the next prime number after ',user_input,' is ',next_prime);
end.
您應該聲明n元素的bool數組(素數的值是true),其中n是由用戶輸入和乘以二的數字。然後使用Eratosthenes算法篩選找到所有素數n(刪除所有將它們的值更改爲false的複合數字)。之後,輸入值後找到下一個素數將很容易。真值的索引是素數。
嘗試編寫自己的代碼,然後編輯您的問題,如果它不起作用。
var a,y,i,k:qword;
f:text;
begin
assign(f,'numere.prime');
reset(f);
while not eof(f) do
begin
readln(f,i);
end;
close(f);
repeat
k:=0;
inc(i);
reset(f);
while not eof(f) do
begin
readln(f,a);
if i mod a = 0 then
begin
inc(k);
break;
end;
end;
close(f);
if k=0 then
begin
append(f);
writeln(f,i);
close(f);
end;
until i=10000000;
end.
該程序在文件中寫入10000000以下的所有素數。稍後,您可以編寫一個新程序來檢查輸入的號碼是否在該文件中。(在文件的第一行是'2')
猜你試圖讓某人做你的功課 – 2014-10-05 09:56:10
除了知道一個知識清單並使用那個或蠻力測試每種可能性。 – Lucas 2014-10-05 09:57:02
創建小於輸入的素數數組,併爲每個大於輸入的數字嘗試除以素數組的每個元素,如果能夠找到至少一個素數因子,則繼續前進,直到找到具有零因子的整數。 – 2014-10-05 09:58:42