【学习贴】编程问题求解
pascal吧
全部回复
仅看楼主
level 4
Miaodeno 楼主
T1
读入正整数n。求2到n之间所有的素数。
然后我的编程是这样的:
结果素数基本上能够输出,但是还存在一些非素数在里面
不知道哪位大神能告诉我这里面哪里出错了
谢谢
2016年07月12日 09点07分 1
level 4
Miaodeno 楼主
就没人回我
哼
2016年07月13日 09点07分 2
你没有考虑负数,0,1这些不是素数的,2你也没有考虑,他是素数
2016年07月13日 10点07分
@Ruo时光回忆 他说的是2到n
2016年07月14日 08点07分
回复列宁2003:我之前的程序跟你不一样,它是直接问是不是素数
2016年07月14日 08点07分
level 9
不明你程序意思[滑稽]
2016年07月13日 09点07分 3
level 11
要不弄个布尔变量,if k mod I =0为假 如果k的一次循环后这个变量为真那么输出k
2016年07月13日 23点07分 4
这个应该可以的
2016年07月14日 07点07分
level 9
表示没看过这样的程序。
我的程序:
var
n,i:longint;
function check(x:longint):boolean;
var i:longint;
begin
for i:=2 to trunc(sqrt(x)) do
if x mod i=0 then exit(false);
exit(true);
end;
begin
readln(n);
write(2);
for i:=3 to n do
if check(i) then write(' ',i);
writeln;
end.
2016年07月14日 08点07分 5
LZ,这个看得懂吧
2016年07月14日 08点07分
看得懂 布尔类型确实可以解这题 谢谢
2016年07月15日 00点07分
level 9
可以用布尔型做,你这个方法我不会[汗]
2016年07月31日 09点07分 6
level 7
辗转相除?玩脱了吧
2016年08月07日 11点08分 7
这个是判断素数之类的问题 跟辗转相除明明没有任何关系
2016年08月18日 16点08分
level 4
Miaodeno 楼主
T2
关于指针变量:
如果指针变量p:=2
那这个意思是不是p指向的地址就是2?
2016年08月18日 16点08分 8
level 9
begin
writeln("2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97");
end.
2016年08月18日 23点08分 9
这个好,简单易懂实用。[喷]
2016年08月23日 05点08分
@leigh2000 [酷]确实
2016年08月26日 01点08分
level 1
n不大的话可以用筛法来做。
const
MAXLEN=1048576;
var
PrimeTable:array [0..MAXLEN] of Boolean;
procedure BuildPrimeTable(m:LongWord);
var
i, j:LongWord;
begin
PrimeTable[0]:=false;
PrimeTable[1]:=false;
FillChar(PrimeTable[2], n-1, 1);
for i:=2 to m do
if PrimeTable[i] do
begin
write(i, ' ');
j:=i;
while i*j<=m do
begin
PrimeTable[i*j]:=false;
inc(j);
end;
end;
end;
2016年08月20日 05点08分 10
用筛法做的话也可以用集合吧?
2016年08月20日 05点08分
@Miaodeno 集合太短了,只支持0..255的范围。假如你用 bitpacked array [0..SETSIZE*8-1] of Boolean 的话就能和集合本质相同了。
2016年08月20日 05点08分
回复 黄金止手 :纠正一下 集合范围是0..256 但是还是很感谢你提供新的方法qvq谢谢!!
2016年08月20日 08点08分
@Miaodeno 0..256无法通过编译。集合元素必须属是Byte、Char、Boolean或序数在Byte范围内的枚举类型。
2016年08月20日 08点08分
1