根据素数的定义求解100以内的素数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附:利用筛选法求解100以内的素数
# define SIZE 100
# include "stdio.h"
# include "math.h"
void prime(int a[],int n)
{
int i,j;
for(i=2;i<=n;i++)/*将2到100存入数组*/
a[i]=i;
for(i=2;i<=sqrt(n);i++)/*从2到根号n循环*/
if(a[i]!=0)
printf("%-4d",a[i]);/*输出数组中所有非零数*/
return 0;
}
这个方法的思想是划去100以内的非素数,具体操作是给出2到100的所有数字,然后以当前最小的数作为因子,将后面所有能被这个数字整除的数都划去(例如当前数字是2,就将后面所有能被2整除的数都划去,在算法中即设为0)。
}
int main()
{
int i,k,a[SIZE/2Hale Waihona Puke Baidu;
k=primel(a,SIZE);/*调用函数*/
printf("\n");
for(i=0;i<k-1;i++)
{
printf("%-4d",a[i]);/*输出数组a中的素数*/
}
return 0;
}
在学这个算法的时候,我有一处不太能理解:就是代码中黄颜色标注出来的部分。为啥判断一个数是不是素数时,只用比较到这个数的平方根就行。后来通过查资料发现,当一个数不能被从2开始直到自身开根号为止这个范围内的整数整除,那它就是素数。这个公理是数学上的证明,应用到算法上极大的提高了算法的效率。所以数学真的是很重要丫,要努力的把数学学得更好。
{
flag=1;
for(j=2;j<=sqrt(i)&&flag;j++)/* j从2到根号i循环,同时标志变量也控制循环*/
if(i%j==0)
flag=0;/*当有能整除的数时,就把标志变量的值改为0,控制循环结束*/
if(flag==1)
{
a[k]=i;/*把素数存在数组a中*/
k++;
}
}
return k;/*返回素数个数*/
for(j=i+1;j<=n;j++)
if(a[i]!=0&&a[j]%a[i]==0)/*循环比较能否被当前数整除,若能就将值设为0*/
a[j]=0;
}
int main()
{
int i,a[SIZE+1];
prime(a,SIZE);/*调用函数*/
printf("\n");
for(i=2;i<=SIZE;i++)
根据素数的定义求解100以内的素数(代码使用C语言)
#include "stdio.h"
#include "math.h"
#define SIZE 100
int primel(int a[],int n)
{
int i,j,k=0,flag;
for(i=2;i<=n;i++)/*i从2到n,对每个i都进行判断*/
# define SIZE 100
# include "stdio.h"
# include "math.h"
void prime(int a[],int n)
{
int i,j;
for(i=2;i<=n;i++)/*将2到100存入数组*/
a[i]=i;
for(i=2;i<=sqrt(n);i++)/*从2到根号n循环*/
if(a[i]!=0)
printf("%-4d",a[i]);/*输出数组中所有非零数*/
return 0;
}
这个方法的思想是划去100以内的非素数,具体操作是给出2到100的所有数字,然后以当前最小的数作为因子,将后面所有能被这个数字整除的数都划去(例如当前数字是2,就将后面所有能被2整除的数都划去,在算法中即设为0)。
}
int main()
{
int i,k,a[SIZE/2Hale Waihona Puke Baidu;
k=primel(a,SIZE);/*调用函数*/
printf("\n");
for(i=0;i<k-1;i++)
{
printf("%-4d",a[i]);/*输出数组a中的素数*/
}
return 0;
}
在学这个算法的时候,我有一处不太能理解:就是代码中黄颜色标注出来的部分。为啥判断一个数是不是素数时,只用比较到这个数的平方根就行。后来通过查资料发现,当一个数不能被从2开始直到自身开根号为止这个范围内的整数整除,那它就是素数。这个公理是数学上的证明,应用到算法上极大的提高了算法的效率。所以数学真的是很重要丫,要努力的把数学学得更好。
{
flag=1;
for(j=2;j<=sqrt(i)&&flag;j++)/* j从2到根号i循环,同时标志变量也控制循环*/
if(i%j==0)
flag=0;/*当有能整除的数时,就把标志变量的值改为0,控制循环结束*/
if(flag==1)
{
a[k]=i;/*把素数存在数组a中*/
k++;
}
}
return k;/*返回素数个数*/
for(j=i+1;j<=n;j++)
if(a[i]!=0&&a[j]%a[i]==0)/*循环比较能否被当前数整除,若能就将值设为0*/
a[j]=0;
}
int main()
{
int i,a[SIZE+1];
prime(a,SIZE);/*调用函数*/
printf("\n");
for(i=2;i<=SIZE;i++)
根据素数的定义求解100以内的素数(代码使用C语言)
#include "stdio.h"
#include "math.h"
#define SIZE 100
int primel(int a[],int n)
{
int i,j,k=0,flag;
for(i=2;i<=n;i++)/*i从2到n,对每个i都进行判断*/