用穷举法找出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的质数并显示出来的主要内容,如果未能解决你的问题,请参考以下文章