C语言求素数

C语言求素数,第1张

#include<stdioh>

#include<mathh>

void main()

{

    int x=100,d=999,a,i,temp;

    for(x;x<=d;x++)

    {

        temp = 0;

        a=sqrt(x);

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

        {

            if(x%i==0)

            {

                temp = 1;

                break;

            }

        }

        if(temp == 0)

            printf(" %d ",x);

    }

}

程序及解释如下:

首先判断素数的算法:用一个数分别去除以2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

则有如下程序

{ int m,k,i;

for(m=1;m<=100;m=m+2)      //m=m+2,因为偶数都不是素数,不用考虑,所以每次m+2

{ k=sqrt(m)                            //先求这个数的平方跟

for(i=2;i<=k;i++)                    //然后用i(从2到k,即m的平方跟)去除m,

if(m%i==0) break;                 //如果能被整除, 则不是素数,break

if(i>=k+1) pritnf("%d",m);    //如果i>k+1,则说明没有数能整除m则m是素数

}

}

扩展资料:

素数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入质数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找质数的过程(分解质因数)过久,使即使取得信息也会无意义。

在汽车变速箱齿轮的设计上,相邻的两个大小齿轮齿数设计成质数,以增加两齿轮内两个相同的齿相遇啮合次数的最小公倍数,可增强耐用度减少故障。

在害虫的生物生长周期与杀虫剂使用之间的关系上,杀虫剂的质数次数的使用也得到了证明。实验表明,质数次数地使用杀虫剂是最合理的:都是使用在害虫繁殖的高潮期,而且害虫很难产生抗药性。

以质数形式无规律变化的导d和鱼雷可以使敌人不易拦截。

多数生物的生命周期也是质数(单位为年),这样可以最大程度地减少碰见天敌的机会。

参考资料:

百度百科 素数

#include <iostream>

using namespace std;

int prime(int n);

int prime(int n)

{

int i;

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

if(n%i==0)

return 0;

else

return 1;

return 0;

}

void main(){

int m;

cout<<"请输入这个数m=";

cin>>m;

if(prime(m))

cout << m << " 是素数 ";

else cout << m << " 不是素数 ";

}

//我分别写出了求素数和判断素数的程序

/

//判断一个数是否为素数

#include<stdioh>

#include<mathh>

int isprime(int);

void main()

{

int inumber;

printf("请输入一个非负整数: ");

scanf("%d",&inumber);

if(isprime(inumber))

printf("%d是素数!\n",inumber);

else

printf("%d不是素数!\n",inumber);

}

int isprime(int a)

{

int i;

for(i=2;i<=sqrt(a);i++)

if(a%i==0)

return 0;

return 1;

}

/

//

//求某个正整数以内的素数

#include"stdioh"

#include"mathh"

int main(void)

{

int count,i,m,n,num;

printf("请输入所求范围(正整数): ");

scanf("%d",&num);

count=0;//count记录素数的个数

printf("%d以内的素数为:\n",num);

for(m=2;m<=num;m++)

{

n=sqrt(m);

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

{

if(m%i==0)

break;

}

if(i>n)//如果m是素数

{

printf("%6d",m);

count++;

if(count%10==0)//count为10的倍数时换行

printf("\n");

}

}

printf("\n");

return 0;

}

在程序的开头加入#include<mathh>

下面是fun函数:

int fun(int mm,int b[MAX])

{

int i,mmm,n=0;

for(mmm=2;mmm<=mm;mmm++)

{

for(i=2;i<=sqrt(mmm);i++)

if(mmm%i==0) break;

if(i>sqrt(mmm))

{

b[n]=mmm;

n+=1;

}

}

return n;

}

分析:

如果mm<=1,外循环不启动,直接返回n,此时n=0

如果mm=2,外循环启动,内循环i<=sqrt(mmm)的条件不满足,不启动,内循环下面的判断条件满足,于是让b[n]=mmm,n+=1,即找到一个符合条件的素数,此时b[n]既b[0]=2,然后n+=1,表示符合条件的素数的个数加1

同样,当mm=3的时候,内循环由于条件不满足,是不会执行的,但是在内循环下面的条件判断都满足,所以会把结果保存在n和b[n]里面,这时,外循环要执行2次

当mm>3时,内循环也会启动,但是要等内循环结束之后i的值满足条件的才是素数,程序的可靠信完全可以放心

刚刚又重新分析了一遍代码,稍微改了改,没问题了

#include<stdioh>

#include<mathh>

#include<stdlibh>

void main()

{

int i,j,n,sum = 0,count=0; /i,j为循环变量,查找从2到n内的所有素数,sum为所有素数总和,count为素数个数/

printf("Input n:");

scanf("%d",&n); /输入n值/

for(i=2;i<=n;i++) /查找从2到n的素数,1就不必了/

{

for(j=2;j<=sqrt(i);j++) /1肯定能被i整除,因而从2开始,循环次数到i的开方次就够了,因为如果在2到sqrt(i)内,没有能被j整除的,后面肯定就也没有了,反之亦然/

{

if(i%j==0) /能被j整除,i不是素数/

break;

}

if(j>sqrt(i)) /没有能被整除的,i就是素数/

{

printf("素数为%d\n",i); /输出素数/

count++; /计数/

sum += i; /素数求和/

}

}

printf("sum = %d,count = %d",sum,count); /输出 和 个数/

system("pause");

}

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存