×

素数算法 c

c语言求素数的算法?实现用于计算素数的算法

admin admin 发表于2022-09-06 10:39:28 浏览123 评论0

抢沙发发表评论

本文目录

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

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


实现用于计算素数的算法


#include 《stdlib.h》
#include 《stdio.h》
struct number
{
int n; //数
int flag; //标记,1为素数,0为非素数
};
void sushu(struct number num)
{
int n,i,j,k;
printf(“Please input a number: “);
scanf(“%d“,&n);

for(i=2;i《=n;i++) //初始化,2到n
{
num[i-2].n=i;
num[i-2].flag=1;
}
for(i=2;i《=n;i++)
{
for(j=2;(num[i-2].n*j)《=n;j++) //素数j倍的数不是素数
{
for(k=2;k《=n;k++)
{
if((num[i-2].n*j)==num[k-2].n)
num[k-2].flag=0;
}
}
}

for(i=2;i《=n;i++)
{
if(num[i-2].flag)
printf(“%d “,num[i-2].n);//打印结果
}
printf(“\n“);
}
int main()
{
struct number num;
sushu(num);
return 0;
}
运行结果1:
Please input a number: 10
2 3 5 7
运行结果2:
Please input a number: 100
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
-素数算法

判断一个数是否为素数的算法


找质数的方法:写出这个数的因数。再判断这个数是质数还是合数。
1、一个数除了1和本身,不再有别的约数,这样的数叫做质数或者素数。例如:2,3,5,7,11,13,17,19,23,29等等。
2、一个数,除了1和本身,还的别的因数,这样的数叫做合数。例如4、8、8、9等等。例如:2的所有因数是1和2两个,所以2是质数。例如6的所有因数是:1,2,3,6。一共是4个,所以6是合数。
找因12的因数:
1×12=12
2×6=12
3×4=12
所以12的因数有:1,2,3,4,6,12。共6个。
找因数的方法可以把这个数分成两个因数相乘的积。从一开始比较容易找,写的时候最好能从小到大写出来。重复的只能写一个。例如9的因数:1×9=9
3×3=9
9的因数是:1,3,9共3个。(重复的3只能写一个。)
-c

生成素数表的算法有哪些


筛选法求素数表,最快的素数表生成算法。
所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。
具体做法如下:
《1》 先将1挖掉(因为1不是素数)。
《2》 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
《3》 用3去除它后面的各数,把3的倍数挖掉。
《4》 分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如找1~50的素数,要一直进行到除数为47为止(事实上,可以简化,如果需要找1~n范围内素数表,只需进行到除数为n^2(根号n),取其整数即可。例如对1~50,只需进行到将50^2作为除数即可。)
如上算法可表示为:
《1》 挖去1;
《2》 用刚才被挖去的数的下一个数p去除p后面各数,把p的倍数挖掉;
《3》 检查p是否小于n^2的整数部分(如果n=1000, 则检查p《31?),如果是,则返回(2)继续执行,否则就结束;
《4》 纸上剩下的数就是素数。
参考链接:http://blog.chinaunix.net/uid-9078996-id-2010292.html
-素数算法

求素数的最简便的算法程序


S1:定义2个变量N
R
S2:N=1
S3:输入的数被N整除
余数为r
S4:R=0则
输入的数不为素数
结束
S5:R!=0
N=N+1
TO
S3
S6:N《输入的数
输入的数为素数

一个求素数的算法


t从0到cap^2-1
i从0到cap-1
j从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,可以将其输出
希望你能看明白
不懂的话
还可以问的
一般晚上十点我都有空
-c

c语言素数的算法


思路如下:
1、求2-n之间的所有素数
2、创建一个数组a[n+2],其下表为2...n+1
3、数组的功能是记录那些数十素数,其下标表示素数,元素初始化时全为1,表示全部数假设都是素数
4、从2开始往后访问数组的每一个元素,如果这个数十素数就输出,否则往后遍历
5、遍历的同时如果这个数i是素数,则进一步往后将这个数的倍数2*i,3*i,....将这些数都标记为0表示不是素数
6、执行完毕将输出所有素数了
-素数算法

求素数算法的数学证明


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