C语言素数程序

C语言素数程序,第1张

flag 在这个程序中是非素数标记

通过验证每个100以内的数字能不能被除1和他本身之外的数整除,如果不能,标为1,就表示这个数是素数,如果找到一个能被1和它本身之外的数整除的数,就把flag标为0,

最后,如果flag是1,就打印出这个数,不然就不打印这个数

用常规的判素性方法可如下实现

#include "stdioh"

#include "mathh"

bool IsPrime(int x)

{

int i, s;

s = sqrt(x + 1);

for(i = 2; i <= s; i++)

if(x % i == 0) return false;

return true;

}

void main( )

{

int i;

for(i = 2; i < 100; i++)

if(IsPrime(i))

printf("%d ", i);

}

也可采用筛选法,筛选法效率会高一些,楼上的虽然也是筛选法,但他的效率却并不高。筛选法的思路是将那些非素数筛掉,留下那些素数。命题“对于1<x<100的合数x, 必含有小于10的质因子”可以证明是真命题,它的逆反命题“对于1<x<100的数,如果不含有小于10的质因子,则它必为素数。”则也是真命题。因此筛除时,只要筛除含有10以内的质因子的数就可以了。下面给出筛选法的代码。

#include "stdioh"

void main( )

{

bool isprime[100];

int i, j;

isprime[0] = false;

isprime[1] = false;

for(i = 2; i < 100; i++) /先初始化2~100的都是素数,然后将非素数筛除掉/

isprime[i] = true;

for(i = 2; i < 10; i++) /将所有含有小于10的质因子的数筛除掉/

{

if(isprime[i]) /如果i是素数,则将它的倍数全部筛掉/

for(j = i i; j < 100; j += i) /从ii开始检测是因为小于ii的合数都被小于i的素数筛除了/

isprime[j] = false;

}

for(i = 2; i < 100; i++)

if(isprime[i])

printf("%d ", i);

}

#include<stdioh>

void

main()

{

int

i,t,choose=0;

for(i=100;i<=1000;i++)

{

choose=0;

for(t=2;t<=(i-1);t++)

{

if(i%t==0){

choose=1;break;}

}

if(choose==0)

printf("%d\t",i);

}

getch();

}

也不给分

哈哈按照你的改的

试过绝对行

C语言-寻找素数

附代码:

#include<stdioh>

#include<mathh>

int main()//原理:设ab=c,a<b,则有a<根号c<b。若设a恒小于根号c,则只需判断a是否为因数

{

int a, b;

printf("请按从小到大输入两个素数:");

scanf_s("%d %d", &a, &b);

int n = 0,m=0,sum = 0;

double i, j;//i是从a到b的待筛选数,j是从2到根号i的除数,要判断j是否为i的因数

for (i = a; i <= b; i++)

{

m = 0;

int c = int(pow(i, 05));

for (j = 2; j <= c; j++)

{

if ((i / j - int(i / j)) == 00)

{

m++;//m是i被从2到根号i的j除了之后,商为整数,即发现j是i的因数的次数

}

}

if (m==0)

{

printf("找到素数:%d\n", int(i));

n++;

sum = sum + i;

}

}

printf("大于等于%d,小于等于%d的素数的个数为:%d\n", a, b, n);

printf("它们的和为:%d", sum);

return 0;

}

工具/材料

ubuntu,vim,gcc

01

打开ubuntu并开启一个终端,输入命令vim is_primec,打开编辑页面,输入预处理指令#include<stdioh>用于在主函数中调用判断函数。然后定义一个函数int is_prime(int n),即判断整数n是否为素数。

02

首先,判断这个数是否小于2若是,则直接返回0,即表示它不是一个素数。

03

然后定义中间的因数i,初始值为2。依次使n对i取余数,看n能否整除i,然后令i自增直到i的平方大于n。在这过程中,如果遇到n能整除i,则说明n不是一个素数。如果循环能够直到i的平方大于n才结束,说明n是一个素数。

04

接下来,我们使用主函数进行测试,使用printf("%d : %d\n", n, is_prime(n))的格式进行输出。如果输出结果为0,说明不为素数;结果为1,说明是一个素数。

测试的数据依次是2,4,9,15, 17, 23, 25。

05

退出编辑器vim,然后使用gcc编译并运行它,得到结果。通过结果我们可以看出,预期的结果与我们对于素数的认知是相同的,说明我们的程序编写没有错误。以下是所有的源代码:

#include <stdioh>

//判断一个数是否为素数的函数定义

int is_prime(int n)

{

//判断n是否小于2若小于则直接返回0

//表示n不是一个素数

if(n < 2)

return 0;

//定义一个中间变量i,初始化i=2

int i = 2;

//依次判断每一个不大于根号n的i是否能被n整除

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

{

//如果能够整除

if(n % i == 0)

//直接返回0,表示n不是一个素数

return 0;

}

//如果程序运行到这里,说明ii大于n

//说明n是一个素数

return 1;

}

int main()

{

printf("%d : %d\n", 2, is_prime(2));

printf("%d : %d\n", 4, is_prime(4));

printf("%d : %d\n", 9, is_prime(9));

printf("%d : %d\n", 15, is_prime(15));

printf("%d : %d\n", 17, is_prime(17));

printf("%d : %d\n", 23, is_prime(23));

printf("%d : %d\n", 25, is_prime(25));

return 0;

}

以上就是关于C语言素数程序全部的内容,包括:C语言素数程序、用c语言编写程序输出1-100内的素数、C语言求100到1000素数的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9511032.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存