×

素数算法

一个求素数的算法?求素数算法的数学证明

admin admin 发表于2023-08-11 08:13:51 浏览39 评论0

抢沙发发表评论

本文目录

一个求素数的算法

t从0到cap^2-1i从0到cap-1j从0到i实际上这里cap起的作用仅仅为了使i和j满足:i从0到cap-1,j从0到i实际上composite为j从2到i-1时整除i的个数当j=0时,使composite重置为0当j=i时,开始判断每次j能整除i,composite则增加1,到时就不会输出i当2到i-1的j都不整除i,此时i为素数,composite为0,可以将其输出希望你能看明白不懂的话还可以问的一般晚上十点我都有空

求素数算法的数学证明

因为对一个数n,如果他能分解成n=pq,那么pq里必然有一个大于等于根号n一个小于等于根号n,也就是说一个合数必然有一个因子是小于等于根号n的。所以对一个数n,只要检验他有没有小于等于根号n的因子就可以了

c语言求素数的算法

根据素数的性质,代码设计如下:

设计一:判断n是否能被1~n-1整除,不能整除为素数

#include《stdio.h》

int main()

{

int i, n;

scanf(“%d“, &n);

for (i = 2; i 《 n ; i++)

{

if (n%i == 0)

break;

}

if (i 《 n) printf(“This is not a prime.“);

else printf(“This is a prime.“);

return 0;

}

设计二:判断n是否能被2~√n间的整数整除,不能整除为素数

#include《stdio.h》

#include《math.h》

int main()

{

int n,i;

double k;

scanf(“%d“, &n);

k = sqrt(n);

for (i = 2; i 《= k;i++)

{

if (n%i == 0) break;

}

if (i 《=k) printf(“This is not a prime.“);

else printf(“This is a prime“);

return 0;

}

扩展资料:

1.素数的定义是只能被1和他本身整除,1不是素数.因此要判断一个数是否为素数.就要判断它能不能被比他小的所有素数整除,这是一个算法.(写到算法时,我只能写出用它除以比他小的所有数,造成运算速度低下)

2.如果一个质数大于根号n,而n可以除尽它,那么n必然也可以除尽一个更小的质数。由此可以得到一个法2较快的素数判断算法 

参考资料:百度百科-scanf

参考资料:百度百科-质数

在设计1到100的素数有哪些C语言算法流程图j=j%k是啥涵义

流程图j=j%k

% 是 取模运算符,整除后的余数

就是 j 除 k 的余数 

如果余数为0,说明 j 能被k 整除,其实,k 就是 j 的一个因子

j 就不是 素数

判断素数的算法用流程图表示对一个大于或等于100的正整数判断它是不是一个素

开始申请工作变量i,b,x输入xi赋值2,b赋值1A:条件判断x%2是否等于0,是b赋值0,跳转到Bi自加1条件判断i是否小于等于x整除2,是跳转到AB:条件判断b是否等于1,如果条件成立则输出: x是素数,否则输出: x不是素数结束

怎样用流程图表示某一整数是否为素数

用自然语言描述算法:(1)输入N;(2)将1送入I(I←1);(3)重复执行下面的操作,直至I=N;(4)将2送入K(K←2);(5)重复执行下面操作,直到K=I-1;A.将I除以K的商送入J(J←I/K);B.若J是整数,I增加1并转向(3);C.否则将K增加1并转向(5);(6)输出I,I增加1并转向(3);(7)结束。根据以上算法,用QBASIC语言可编写如下程序:10 INPUT N20 FOR I=1 TO N30 FOR K=2 TO I-140 J=I/K50 IF J=INT(J) THEN GOTO 8060 NEXT K70 PRINT I,80 NEXT I90 END程序中使用了GOTO无条件转移语句,破坏了程序的结构。寻找另一思路:判断一个自然数M是不是素数,可用2、3、4……去除M,如果这些数都不能整除M,则M是素数。用结构化流程图N-S图描述该算法。INPUT NFOR M=1 TO N STEP 2 K=INT(SQR(M)) I=2 FLAG=1 DO WHILE (I《=K) AND (FLAG=1) IF M MOD I=0 THEN FLAG=0 I=I+1 LOOP IF FLAG=1 THEN PRINT M,NEXT MEND程序中FLAG是一个“标志变量”,FLAG=1表示M未被任何一个整数整除过。如果在某一次循环中,M能被一个整数I整除,则FLAG就置成0。设置FLAG变量的目的主要是为了避免转移语句的出现。因为如果没有设置FLAG变量,在循环执行中,某一次M能被I整除,则要么继续执行循环,直到内循环全部执行完毕,要么用转移语句直接跳出内循环。显然,前者是毫无效率地浪费时间,而后者又不符合结构化程序设计的要求。