7-3 筛选法求素数
输入一个整数n,求n以内的素数。素数指的是除了1和它本身没有其他因子的整数;最小的素数是2,其余的素数都是奇数;素数序列为:2 3 5 7 11 13 17 19……
输入格式:
测试数据有多组,处理到文件尾。对于每组测试,输入一个整数n(1
输出格式:
对于每组测试,输出n以内的素数。每两个素数之间留一个空格。
输入样例:
19
输出样例:
2 3 5 7 11 13 17 19
#include<stdio.h>
int main()
{
int n;
bool prime[1000];
for(int i=0;i<1000;i++)
{
prime[i]=0;
}
scanf("%d",&n);
for(int i=2;i<=n;i++)
{
if(prime[i]==0)
{
for(int j=i*2;j<=n;j=j+i)
{
prime[j]=1;
}
}
}
for(int i=2;i<=n;i++)
{
if(prime[i]==0)printf("%d ",i);
}
}
#include <stdio.h>
#include <math.h>
/*输入一个整数n,求n以内的素数。素数指的是除了1和它本身没有其他因子的整数;最小的素数是2,其余的素数都是奇数;素数序列为:2 3 5 7 11 13 17 19……
输入格式:
测试数据有多组,处理到文件尾。对于每组测试,输入一个整数n(1<n<2000)。
输出格式:
对于每组测试,输出n以内的素数。每两个素数之间留一个空格。
输入样例:
19
输出样例:
2 3 5 7 11 13 17 19*/
int prime(int m);
int main(void){
int i,n;
printf("Enter n:");
scanf("%d",&n);
for(i=2;i<=n;i++){
if(prime(i)==1){
printf("%d ",i);
}
}
}
//判断素数的函数
int prime(int m){
int i,limit;
if(m<=1){/*小于等于1的数不是素数*/
return 0;
}else if(m==2){/*2是素数*/
return 1;
}else{/*其他情况:大于2的整数*/
limit=sqrt(m)+1;
for(i=2;i<=limit;i++){/*若m能被某个i整除,则m不是素数,返回0*/
if(m%i==0){
return 0;
}
}
/* 若循环正常结束,说明m不能被任何一个i整除,则m素数,返回1*/
return 1;
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:方法一:递归
话不多说,直接上代码。只要注意下递归出口就行
public class Solution {
public int Fibonacci(int n) {
if(n==1){
return 1;
}
if(n==0){
return 0;
}
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
方法二:非递归方法
public class Solution {
public int Fibonacci(int n) {
int [] f=new int[40];
f[0]=0;
f[1]=1;
for(int i=2;i<=n;i++){
f[i]=f[i-1]+f[i-2];
}
return f[n];
}
}
方法三:另一种非递归,原理同上
public class Solution {
public int Fibonacci(int n) {
if(n<2){
return n;
}
int a=0;
int b=1;
for(int i=2;i<=n;i++){
b=a+b;
a=b-a;
}
return b;
}
}