C语言求素数

C语言求素数,第1张

。。。 求素数是个简单的问题, 你写的可不简单!

include <stdioh>
int main(void)
{
        int a, i;
        scanf("%d", &a);
        for (i = 2; i  i <= a; i++) {
                if (a % i == 0) {
                        printf("%d: not a prime", a); 
                        return 0;
                }   
        }   
        printf("%d: is a prime", a); 
        return 0;
}

1 用 i i <= a 节俭循环次数。

2 一旦检查到此数不是素数就没必要再循环下去,直接 return 0

#include <stdioh>

void main()
{
bool isPrime = true;//判断是不是素数,如果是素数就为true,如果不是就为false

printf("从1到10的素数是:\n");//输出字符
for(int i = 2;i < 10;i++)//循环,从2到10(因为1不是素数)
{
for(int j = 2;j < i;j++)//内部循环,从2到要求是不是素数的数
{
if(i % j == 0)//如果这个数能整除从3到自身减1中任何一个数
{
isPrime = false;//这个数就不是素数,所以isPrime为false
break;//跳出循环
}
}

if(isPrime) printf("%d ,",i);//如果循环完,i都不能整除上面循环里的任何一个数,那i就是素数,输出
else isPrime = true;//如果i不是素数,就不输出i,并设isPrime为true,方便下次循环
}
printf("\n");//输出换行
}

真是服你了,for后面加了个;
而且代码错误百出,看代码王给你指点迷津
#include<stdioh>
int sushu(int m)
{
int n,i;
n=m/2;
for(i=2;i<n;i++)
if(m%i==0)
return 0;
return 1;
}
int main(void)
{int k;
for(k=2;k<=100;k++)
if(sushu(k)) printf("%d\n",k);
return 0;
}

#include"stdioh"
#include"mathh"
main()
{
int i,k,m;
scanf("%d",&i);
k=sqrt(i); //判别i是否为素数,只需使2~根号i之间的每一个整数去除
for(m=2;m<=k;m++)
if(i%m==0)break;
if(m>k)
printf("%d是素数 ",i);
else printf("%d不是素数",i);
getch();
}

除2以外,素数皆为奇数,所以对2单独处理,从3开始,将100以内的奇数逐一进行素数考察,是则输出,不是则跳过。另设一计数变量控制换行,每输出5个素数添加一个回车。代码如下:

#include "stdioh"

int main(int argc,char argv[]){

int i,n,t;

pr

#include

#include

main()

{

int a,i,flag,count=0;

for(a=1;a <=100;a++)

{

flag=0;

for(i=2;i

#include int main()

{

int i,n,k,b;

for(i=1,b=1;i<=100;i++)

{

for(n=2;n {

k=i%n;

if(k==0)

break;

}

扩展资料:


C语言注意事项:

1、预编译命令不是语言语句,不使用分号,不占用运行时间。

2、在IDE中通常包括编辑器,编译器,汇编器和链接器,在这个过程中是语言等级逐级降低的过程,从最高级的c语言到中级语言汇编语言再到低级语言机器语言,编辑器生成文件为c文件,编译器生成的文件为obj汇编器生成的文件为0文件,链接器生成的是exe文件。

3、注意 return和exit的区别, return是让本函数运行结束,而exit是让本程序运行结束。

4、在指针定义时,一定要进行初始化,否则就会出现意想不到的错误,如果不能找到对应地址赋值,那就赋给NULL(注意大写)。

5、gets可以 scanf办成办不成的事,就是可以接受空格,puts在最后会输出一个换行。

所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。因此判断一个整数m是否是素数,只需把m被2~m-1之间的每一个整数去除,如果都不能被整除,那么m就是一个素数
另外判断方法还可以简化。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=28,2小于4,8大于4,16=44,4=√16,因此只需判定在2~4之间有无因子即可)
#include<stdioh>
#include<mathh>
void main()
{
int m,i,k;
printf("请输入一个整数:");
scanf("%d",&m);
k=(int)sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>k)
printf("%d 是素数。\n",m);
else
printf("%d 不是素数。\n",m);
}

第一种方法就是用1到100之间的每个数字,除以2到其本身前面的那一个数字,如果此过程中出现整除的现象,则该数不是素数。如果没有整除的现象,则该数为素数输出。代码如下#include<stdioh>
int main()
{
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++)
{
int j = 0;
for (j = 2; j <= i; j++)
{
if (i%j == 0)
{
break;
}
}
if (i == j)
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);
return 0;
}
第二种方法使用了SQRT函数,也就是平方根,这里的平方根是整数。众所周知,非素数可以写成除了1和它本身相乘的ab方式,而a、b之间必有一个小于等于ab之积的开平方根;如果这个非素数能够被a整除,则相应的肯定会被b整除。这种方法用1到100之间的数字除以2到它的开平方根(如果该数的平方根是整数则可以除到),在此之间如果出现整除现象,则该数不是素数;如果没有出现整除现象,则该数是素数。显而易见,这种方法比第一种方法要简便,运行的次数少#include<stdioh>
#include<mathh>
int main()
{
int i=0;
int count=0;
for(i=1;i<=100;i++)
{
int j=0;
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
break;
}
}
if(j>sqrt(i))
{
count++;
printf("%d ",i);
}
}
printf("\ncount=%d\n",count);
return 0;
}


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

原文地址: http://outofmemory.cn/yw/12847119.html

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

发表评论

登录后才能评论

评论列表(0条)

保存