2014-10-05 56 views
-1

我正試圖在用戶輸入數字後找到下一個素數,而且我必須以帕斯卡形式進行。我甚至不知道該從哪裏開始,有誰能幫助我?找到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

猜你試圖讓某人做你的功課 – 2014-10-05 09:56:10

+0

除了知道一個知識清單並使用那個或蠻力測試每種可能性。 – Lucas 2014-10-05 09:57:02

+0

創建小於輸入的素數數組,併爲每個大於輸入的數字嘗試除以素數組的每個元素,如果能夠找到至少一個素數因子,則繼續前進,直到找到具有零因子的整數。 – 2014-10-05 09:58:42

回答

0

兩個提示:

  • 如果輸入的號碼是否< 2然後接下來的素數是2。

  • 如果輸入的號碼是否> = 2,那麼接下來的素數是奇數大於輸入的數字,小於輸入的數字的兩倍(伯特蘭的公設)。

不,我們不會爲您編寫您的Pascal代碼。

0

解決這個問題的第一步是弄清楚如何手工完成。從維基百科:

一個簡單但速度慢的方法來驗證給定數字的素數 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. 
1

您應該聲明n元素的bool數組(素數的值是true),其中n是由用戶輸入和乘以二的數字。然後使用Eratosthenes算法篩選找到所有素數n(刪除所有將它們的值更改爲false的複合數字)。之後,輸入值後找到下一個素數將很容易。真值的索引是素數。

嘗試編寫自己的代碼,然後編輯您的問題,如果它不起作用。

0
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')