本文目录一览:
C语言求素数个数,交上去总说我运行超时,大佬能优化一下吗?
#includestdio.h
#includemath.h
#define max(x,y) xy?x:y
int main() {
int a,b, i, j,flag1=0,count=0;
scanf("%d %d",a,b);
if(b=3)
{
a=max(a,2);//从2开始
for(int i=a;i=b;i++)
{
flag1=0;//用于标记
for(int j=2;j*j=i;j++)//j*j=i;减少不必要的循环
{
if(i%j==0)//i能被j整除,不是素数
{
flag1=1;//标记
break;//结束内循环,减少不必要的循环
}
}
if(flag1==0)//未被标记即是素数
count++;//素数计数
}
}
else if(b==2)
count=1;
else
count=0;
printf("%d",count);
return 0;
}
用C语言如何判断素数?
素数又称质数,所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。
思路1、判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
思路2、判断方法还可以简化。
m 不必被2~m-1之间的每一个整数去除,只需被2~√m之间的每一个整数去除就可以了。如果 m 不能被2~√m 间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。
原因:因为如果m能被2~m-1之间任一整数整除,其二个因子必定有一个小于或等于√m,另一个大于或等于√m。
例如16能被2、4、8整除,16=2*8,2小于 4,8大于4,16=4*4,4=√16,因此只需判定在2~4之间有无因子即可。
两种思路的代码请看解析。
拓展资料:
素数(prime number)又称质数,有无限个。素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
参考资料:
百度百科——素数
百度百科——C语言
c语言求1到n的素数(不要超时)
这个应该是最快的方式了 如果还超时 那么就无解了
#include stdio.h
#include stdlib.h
#include string.h
void init(char *map, int max)
{
int i,j;
memset(map, 0, max);
for(i = 2; i = max; i ++)
{
if(map[i]) continue;
for(j = i*2; j = max; j += i)
map[j] = 1;
}
}
int main()
{
int n;
char *map;
int i, j;
printf("input max number n\n");
scanf("%d", n);
map = malloc(n);
if(map == NULL)
{
printf("not enough memory\n");
return -1;
}
init(map, n);
printf("prime numbers list from 1 to %d\n", n);
for(i = 2, j = 0; i n; i ++)
{
if(!map[i])
{
printf("%d ", i);
if(++j % 10 == 0) printf("\n");
}
}
printf("\n");
return 0;
}
用C语言如何判断素数
按照如下步骤即可用C语言判断素数:
1、首先打开visual C++ 6.0,然后点击左上角的文件,再点击新建。
2、然后在弹出的新建对话框中点击C++Source File。
3、在新建的文件文本框中输入预处理命令和主函数,即函数头和空类型。
4、然后再定义变量并输入一个数字,即定义变量的数据类型,输出文字提示,再输入一个数字。
5、然后用for函数和if函数判断是否是素数。
6、点击确定后即可成功创建刚刚新建的程序,随机输入一个数字即可验证一下刚刚创建的C语言。