一、基础知识
break:跳出本层循环层
continue:跳出本次循环
int prime[100]={2}; //prime数组为:2,0,0,......,0
if(0) {......} //if()里是0时,执行else,其他非0数字执行if后跟着的{}
else {......}
二、常用套路
prime[count++]=i; //i给到数组prime[count],指针向后移一位(即count+1)
三、代码(类一:前100个素数;类二:100以内的素数)
类一:isPrime判断i是否为素数,分别与prime数组里前count+1个数相除,余数不为0返回1
运行结果显示的是number个即前100个素数,而不是100以内的素数
#include <stdio.h>
int isPrime(int x,int knownPrimes[],int number)
{
int ret=1;
int i;
for(i=0;i<number;i++)
{
if(x % knownPrimes[i]==0)
{
ret=0;
break;
}
}
return ret;
}
int main()
{
const int number=100;
int prime[number]={2};
int count=1;
int i=3;
while(count<number)
{
if(isPrime(i,prime,count))
{
prime[count++]=i;
}
i++;
}
for(i=0;i<number;i++)
{
printf("%d",prime[i]);
if((i+1)%5)
printf("\t");
else
printf("\n");
}
return 0;
}
类二:求100以内的素数
初始化所有数组元素值为1,将下标为素数的倍数的数组值赋值为0 ,从下标为2的数组开始,将值还为1的的数组的下标进行遍历输出,即为素数。
#include <stdio.h>
int main()
{
const int number=100;
int isPrime[number];
int i;
int x;
for(i=0;i<number;i++) //数组所有元素初始化值为1
{
isPrime[i]=1;
}
for(x=2;x<number;x++) //从素数2(即数组下标2)开始
{
if(isPrime[x])
{
for(i=2;i*x<number;i++) //下标为素数的倍数的数组元素赋值为0,到后面不是素数的都已经被赋值为0了
isPrime[i*x]=0;
}
}
for(i=2;i<number;i++) //从下标为2开始遍历
{
if(isPrime[i])
printf("%d\t",i); //将值还是1的元素的下标进行输出
}
printf("\n");
return 0;
}