用穷举法找出1~100的质数并显示出来

Posted dmx-03

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用穷举法找出1~100的质数并显示出来相关的知识,希望对你有一定的参考价值。

一、问题描述。

用穷举法找出1~100的质数。

二、设计思路。

  1.判断1~100之内的的质数,只需要判断1~根号100内是否还有整数可除即可

  2.利用sqrt求出“i”的平方根,从2开始与比它小或者等于的“j”依次进行判断,如果存在与j求余为0的情况则令flag=0;结束循环。“i”+1,进行下一次的判断。

  3.如果不存在比“i”的平方根小于等于的或者不存在求余为0的情况则输出该数。i”+1进行下一次的判断。

三、程序流程图

 

 四、代码实现

//while方法

#include <iostream>
#include <cmath>
using namespace std;
int main()
int i, j, k, flag;
i = 2;

while (i <= 100)
j = 2;
k = sqrt(i);
flag = 1;
while (j <= k)
if (i % j == 0)
flag = 0;
break;

j++;

if (flag)
cout << i << "是质数" << endl;

i++;

return 0;

//do...while方法

#include <iostream>
#include <cmath>
using namespace std;
int main()

int i, j, k, flag;
i = 2;
do
j = 2;
k = sqrt(i);
flag = 1;
do
if (i % j == 0)
flag = 0;
break;

j++;

while (j <= k);
if (flag)
cout << i << "是质数" << endl;

i += 1;

while (i <= 100);
return 0;

//for循环方法:
#include <iostream>
#include <cmath>
using namespace std;
int main()
cout << "2是质数" << endl;
int i, j, k, flag;
for (i = 3; i <= 100; i++)
k = sqrt(i);
flag = 1;
for (j = 2; j<=k; j++)
if (i % j==0)
flag = 0;
break;


if (flag != 0)
cout << i << "是质数" << endl;


return 0;

 

Pascal语言,用筛选法求出2~1000的质数

急用!!!!!!!!!!!!!!!!!!

Program zishu;
Var a:array [2..1000] of integer;
b:array [2..1000] of boolean;
i,j:integer;
Begin
for i:=2 to 1000 do
begin
a[i]:=i;
b[i]:=true;
end;
i:=1;
repeat
i;=i+1;
if b[i]=true then
for j:=2 to 1000 div i
b[j*i]:=false;
until i=1000;
for i:=2 to 1000 do
if b[i]=true then write(a[i],' ');
End.
筛选法对小数据是可以的 但是要算到100000以上恐怕难了
这里还有Miller-Rabin判素数的方法:
费马小定理:如果P是一个素数,且0<a<p,则a^(p-1)≡1(mod p)
例如,67是一个素数,则2^66mod 67=1。
========不懂就慢慢理解========
========如果想要在联赛拿奖-这些方法还是要积累的======
var i,j,n,tot:longint;
find:boolean;
p:array[1..26] of integer=(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,101);

function power(a,t,r:longint):qword;
begin
if t=1 then exit(a mod r);
if t=0 then exit(1);
power:=power(a,t shr 1,r) mod r;
power:=power*power mod r;
if odd(t) then power:=power*a mod r;
end;

begin
WRite('Input n(Make from 2 to n):');
assign(output,'output.txt');
rewrite(output);
readln(n);
tot:=1;I:=1;WRite(2,',');
Repeat
I:=I+2;//delete ou shu
find:=true;
for j:=1 to 26 do
if (i<>p[j]) and (power(p[j],i-1,i)<>1) then
begin
find:=false;
break;
end;
if find then
begin
write(i,',');
If I Mod 20=0 Then Writeln;
inc(tot);
end;
Until I>N;

WriteLn;
writeln('==========',tot,'=========');
close(output);
end.
//输入N 文件输出output.txt 为1..n的所有素数 可用记事本或写字板打开
参考技术A Program zishu;
Var a:array [2..1000] of integer;
b:array [2..1000] of boolean;
i,j:integer;
Begin
for i:=2 to 1000 do
begin
a[i]:=i;
b[i]:=true;
end;
i:=1;
repeat
i;=i+1;
if b[i]=true then
for j:=2 to 1000 div i
b[j*i]:=false;
until i=1000;
for i:=2 to 1000 do
if b[i]=true then write(a[i],' ');
End.
(快给分)
有问题再请教.本回答被提问者采纳

以上是关于用穷举法找出1~100的质数并显示出来的主要内容,如果未能解决你的问题,请参考以下文章

算法思维之穷举法

输出100之间的所有质数(素数)

wify共享精灵是否用的穷举法将简单的wify密码穷举出来,然后连接的?

用筛选法求100之内的素数

vb实验 随机数中求奇偶数和素数并进行排序

需要两个办法,100以内找出质数?