重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
创新互联公司是一家专业提供哈密企业网站建设,专注与做网站、网站建设、H5响应式网站、小程序制作等业务。10年已为哈密众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
static char m[8000000];
static int prime[500000];
#define MAX_N 7368787
void set(void)
{
int i,j;
for(i = 2; i=MAX_N; i++)
{
if(m[i] == 1) continue;
for(j=i+i; j=MAX_N; j+=i)
m[j]=1;
}
for(i = j=0; i=MAX_N;i++)
if(m[i]==0) prime[j++]=i;
}
int main()
{
int m,n,;
while(~scanf("%d%d",m,n))
{
for(i=m;i=n;i++)
{
printf("%d",prime[i-1]);
if(i==n || (i-m)%10==9) putchar('\n');
else putchar(' ');
}
}
return 0;
}
/判断是不是素数
#includestdio.h
int prime(int a);//函数声明
int main()
{
int n,i;
scanf("%d",n);
if(prime(n)==1) //return返回值1
printf("prime");
else
printf("not prime") ;
}
int prime(int a)
{
int i;
for(i=2;ia;i++)
if(a%i==0)
return 0;//a%i==0不成立
else
return 1;//a%i==0成立
}
扩展资料:
素数的算法
1、素数:除了1和本身外无法被其他自然数整除的数,叫做素数,也称质数,如:2,3,5,7一系列。
2、合数:比1大但不是素数的数称为合数,如:8,9,10一系列。
3、特殊的数字:1和0既不是素数也不是合数。
4、算法: 1确定性算法 2随机性算法 3Eratosthenes算法。
#include "stdafx.h"
int main(int argc, char* argv[])
{
int a=0;
int b=2;
int i=0;
int n1=0;
int n2=0;
printf("请输入所要求哪个范围的质数\n");
scanf("%d %d",n1,n2);
for(a=n1;a=n2;a++)
{
for(b=2;b=a-1;b++)
if(a%b==0) break;
if(a=b)
printf("质数: %d\n",a);
}
printf("\n");
return 0;
}
3
输入你所要求某个范围的质数,两个数用【空格键】隔开。如输入"180 200",
输出:
质数: 181
质数: 191
质数: 193
质数: 197
质数: 199
数学的概念中,素数就是只能被1和它本身所整除的整数。但是有一个例外,就是1不属于素数。所以你在输入一个整数并加以判断的时候就需要考虑这种情况了。如下即可:
while(scanf("%lu", num) == 1 num != 1)
这里用到了while循环来判断输入的数值并加以判断,如果输入格式正确的话会返回一个1并将输入的数值存入num这个变量中,然后再判断num的值是否为1。
在这里有一条很好用的规则用于素数的判断:测试的数只需要界于2到num的平方根之间的所有数,看它们是否可以整除num。如果可以整除,说明输入的数不是素数;反之,说明输入的数是素数。
到这里,就会有人说平方根怎么求,其实这个很好解决。你完全可以像下面这样描述判断条件:
for(div = 2; (div * div) = num;div++){ if(num % div == 0){ if((div * div) != num){
printf("%lu is divisible by %lu and %lu.\n", num, div, num / div);
}else {
printf("%lu is divisible by %lu.\n", num, div);
}
}
}
在这里,在if条件语句里面还嵌套了一个if条件语句,用来判断两个约数是否是一样的,比如144,约数是12和12,这时候就只需要打印一个约数即可。
红框里的代码,加上那个i++的for循环,其逻辑是:
从2开始,遍历所有小于n的整数,
只要存在一个整数可以被n整除(即余数为0),则可判断n为合数.
若从2到n-1范围内,不存在可整除n的数,则判断n为质数.
还有 for(int .......)这种定义变量的写法,要C99才支持,现在很多编译器默认C89标准,或者不支持C99标准,这样写容易出错.
第一个for循环里面,直接把n=0,1,2的情况跳过了.既然这样,变量n直接把初值赋为3不就好了,赋值0干嘛.
第二个for循环里面,判断到isqrt(n)就可以了,还有更简单的求质数算法,感兴趣可以百度.
这是我以前写过的判断质数的程序,希望对你有帮助。
#includestdio.h
int
prime(int
a)
{
int
i;
for(i=2;i=a/2;i++)
{
if(a%i==0)
break;
}
if(ia/2)
return
1;
else
return
0;
}
int
main(void)
{
int
x;
printf("请输入一个整数:");
scanf("%d",x);
if(prime(x))
printf("%d为素数\n",x);
else
printf("%d不是素数\n",x);
}
主要是加了break