程序员测试题:PAT 乙级 1013 数素数 (C语言版本)
PTA题目
思路:
列出所有的素数对,然后根据数组下标列出符合条件的素数,bug是无法确定做多大的素数表,因此往大了做。
#include <stdio.h>
#include <string.h>
#include <math.h>
//判断某数是否素数 ret:返回素数的地址
int sujug(int num,int *ret)
{
int i;
int retu = 1;//1代表素数
*ret=num;
for(i=2;i<=sqrt(num);i++)//判断素数
{
if(num%(i)==0)//如果是合数
{
retu = 0;//0代表合数
break;
}
}
return retu;
}
//获取素数表 num:最大值,本题是100000,a[]存储素数表
void getall(int num,int suarr[])
{
int i;
int su=0;
int p=1;
suarr[0]=2;//素数表起始内容
for(i=1;i<num;i++) //从3开始判断是否是素数,素数表存储从arr[1]开始
{
if(sujug(i+2,&su))
{
suarr[p] = su;
p++;
}
}
}
int main()
{
int m,n,p=0;
scanf("%d %d",&m,&n);
int suarr[10000];
getall(100000,suarr);//存储10^4以内的所有素数
int i;
for(i=m-1;i<n;i++)
{
p++;
if(i<n-1&&p%10!=0) printf("%d ",suarr[i]);
else printf("%d",suarr[i]);
if(p%10==0) printf("\n");
}
return 0;
}