Eoj-1006(Prime)
#include <iostream>
#include <cstring>
#include <cmath>
const int s=1000000;
using namespace std;
bool prime[1000001];
void IsPrime(){ //素数筛法
prime[0]=prime[1]=0;
prime[2]=1;
for(int i=3;i<s;i++){ //去偶数
if(i%2==0) prime[i]=false;
else prime[i]=true;
}
int m=sqrt(s/1.0); //对于任一个大于m的数,要么是质数,要么可以再分,而其质因数至少有一个是小于m的,故该合数比存在于第二轮循环中,第一个循环i<=m
for(int i=3;i<=m;i++){
if(prime[i]){
for(int j=i*i;j<s;j+=2*i)//比i方小的倍数必然已经被筛掉,每次+2i是因为偶数已经被筛掉
prime[j]=false;
}
}
}
int main(){
int n,m;
IsPrime();
while(cin>>n>>m){
int count=0;
for(int i=n;i<=m;i++){
if(prime[i]==true)
count++;
}
cout<<count<<endl;
}
return 0;
}
Eoj-1030(母牛生小牛)
设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第 N 年时有几头母牛?
Input
本题有多组数据。每组数据只有一个整数 N,独占一行。(1≤N≤50)。当 N 为 0 时,输入结束。
Output
对每组数据,输出一个整数(独占一行)表示第 N 年时母牛的数量。
//我的渣版,虽然ac但是运行贼慢
#include <iostream>
using namespace std;
int count=1;
int f(int last){
if(last<4)
return 1;
for(int init=1;init<=last;init++){
if(init>3){
f(last-init+1);
count++;
}
}
return count;
}
int main(){
int m=0;
while(cin>>m){
if(m==0) break;
int result=f(m);
cout<<result<<endl;
count=1;
}
return 0;
}
//是个高手
#include <stdio.h>
int cow(int n){
if(n==1||n==2||n==3)return 1;
else{
return cow(n-1)+cow(n-3);
}
}
int main()
{
int n;
scanf("%d",&n);
while(n){
printf("%d\n",cow(n));
scanf("%d",&n);
}
return 0;
}