
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素数的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)