一道很简单的合数之类的pascal编程问题,就是不知道怎样排除其他的。求大师解答一下
来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/14 23:43:13
一道很简单的合数之类的pascal编程问题,就是不知道怎样排除其他的。求大师解答一下
输入自然数n,求前n个合数(非素数),其素因子仅有2,3,或5。
【输入样例】
3
【输出样例】
4 6 8
但是这个题目说了它的素因子只有2,3,5,例如输入20
应该输出4 6 8 9 10 12 15 16 18 20 24 25 27 30 32 36 40 45 48 50,其中有一些是没有的,例如14,21......等,怎么办?!
输入自然数n,求前n个合数(非素数),其素因子仅有2,3,或5。
【输入样例】
3
【输出样例】
4 6 8
但是这个题目说了它的素因子只有2,3,5,例如输入20
应该输出4 6 8 9 10 12 15 16 18 20 24 25 27 30 32 36 40 45 48 50,其中有一些是没有的,例如14,21......等,怎么办?!
var
m,num:integer; {满足条件的合数个数,计数器}
mm:integer; {计数器--判断有无7以上的因子}
n,nn:integer; { 循环变量,临时变量}
d:array[1..10000] of integer; {存放质数}
k:array[1..10000] of integer; {存放每个质数被整除的次数}
i,j:integer; {循环变量}
z:integer; {质数个数}
function zhisu(n:integer):boolean;
var
j,k:integer;
findd:boolean;
begin
k:=trunc(sqrt(n));
if n=1 then zhisu:=false
else if (n=2)or(n=3) then zhisu:=true
else begin
findd:=false;
j:=1;
repeat
j:=j+1;
if (n mod j)=0 then findd:=true;
until findd or (j>k);
zhisu:=not findd;
end;
end;
begin
readln(m);
num:=0;
for n:=4 to 3000 do begin
nn:=n;
{以下求小于n的质因数并存入数组d中}
z:=0;
for i:=2 to (n div 2) do if zhisu(i) then begin inc(z); d[z]:=i; k[z]:=0; end;
{以下进行质因数分解}
for i:=1 to z do begin
while (nn >=d[i])and(nn mod d[i]=0) do begin
inc(k[i]); nn:=nn div d[i];
end;
end;
{以下判断是否合数,且只有小于等于5的因子}
mm:=0;
for i:=1 to z do if (d[i]>5)and(k[i]>0) then inc(mm);
if (mm=0)and(num
m,num:integer; {满足条件的合数个数,计数器}
mm:integer; {计数器--判断有无7以上的因子}
n,nn:integer; { 循环变量,临时变量}
d:array[1..10000] of integer; {存放质数}
k:array[1..10000] of integer; {存放每个质数被整除的次数}
i,j:integer; {循环变量}
z:integer; {质数个数}
function zhisu(n:integer):boolean;
var
j,k:integer;
findd:boolean;
begin
k:=trunc(sqrt(n));
if n=1 then zhisu:=false
else if (n=2)or(n=3) then zhisu:=true
else begin
findd:=false;
j:=1;
repeat
j:=j+1;
if (n mod j)=0 then findd:=true;
until findd or (j>k);
zhisu:=not findd;
end;
end;
begin
readln(m);
num:=0;
for n:=4 to 3000 do begin
nn:=n;
{以下求小于n的质因数并存入数组d中}
z:=0;
for i:=2 to (n div 2) do if zhisu(i) then begin inc(z); d[z]:=i; k[z]:=0; end;
{以下进行质因数分解}
for i:=1 to z do begin
while (nn >=d[i])and(nn mod d[i]=0) do begin
inc(k[i]); nn:=nn div d[i];
end;
end;
{以下判断是否合数,且只有小于等于5的因子}
mm:=0;
for i:=1 to z do if (d[i]>5)and(k[i]>0) then inc(mm);
if (mm=0)and(num
一道pascal编程问题,求大师解答一下意思就行了。三十悬赏!
一道简单的free pascal题目,各位free pascal大师解答一下吧.
一道非常简单的pascal题目,求大师用最简洁的方法做一下,N只猴子选大王.
帮我做一道简单的编程题目(pascal)
求一道简单的pascal题目
一道简单的FREE PASCAL 希望大牛来解答
一道简单的pascal题目
一道 PASCAL的简单题目
一个很简单的free pascal问题
一道非常简单的pascal题目,求大师用最简洁的方法做一下,N只猴子选大王.选举办法如下:从头到尾1,2,3报数,凡报3
英语大师来帮帮忙,很难的问题求解答
求pascal的一道题目!