我试图在用户输入的数字后找到下一个素数,我必须在pascal中进行。我甚至不知道该怎么做,有人可以帮助我吗?
program PRIME;
uses crt;
var
C, N : INTEGER;
const
A=2;
Begin PS:
Writeln ('enter your number' ) ;
Read (N);
begin
Writeln(
readln;
End.
答案 0 :(得分:1)
你应该声明bool的n元素数组(素数值为真),其中n是用户输入的数字并乘以2。然后使用Eratosthenes算法的筛子找到所有素数达到n(删除所有复合数,将其值更改为false)。之后,在输入值后找到下一个素数将很容易。真值的索引是素数。
尝试编写自己的代码,然后编辑问题,如果它不起作用。
答案 1 :(得分:0)
两个提示:
如果输入的数字是< 2然后下一个素数是2。
如果输入的数字是> = 2,那么下一个素数是一个奇数,大于输入的数字,小于输入数字的两倍(Bertrand的假设)。
不,我们不会为您编写Pascal代码。
答案 2 :(得分:0)
解决这个问题的第一步是弄清楚如何手工完成。来自维基百科:
验证给定数字的素数的简单但缓慢的方法 n被称为试验分裂。它包括测试n是否为a 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.
答案 3 :(得分: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')