一些题的题解

一、

洛谷 B2137 判决素数个数

题目描述

X X X Y Y Y 之间的素数个数(包括 X X X Y Y Y)。

输入格式

两个整数 X X X Y Y Y 1 ≤ X , Y ≤ 1 0 5 1 \le X,Y \le 10^5 1X,Y105)。

输出格式

输出一个整数,表示 X , Y X, Y X,Y 之间的素数个数(包括 X X X Y Y Y)。

样例 #1

样例输入 #1

1 100

样例输出 #1

25

首先,要判断素数。

不难证明对于 ∀   n ( n ∈ R ) \forall \ n (n \in \R)  n(nR) ,判断质数是只需要判断到 n \sqrt{n} n 即可。

所以,长这样:

bool isprim(int x)
{
    if(x==2) return 1;//保守一点的特判
    for (int i=2;i*i<=x;i++)
    {
        if(x%i==0) return 0;
    }
    return 1;
}

主函数:

int main()
{
    int x,y;cin>>x>>y;
    if(x>y) swap(x,y);
    int cnt=0;
    for (int i=x;i<=y;i++)
    {
        bool flag=1;
        if(isprim(i)&&i!=1) cnt++; //1 啥都不是
    }
    cout<<cnt<<endl;
    return 0;
}

[NOIP2002 普及组] 级数求和

题目描述

已知: S n = 1 + 1 2 + 1 3 + … + 1 n S_n= 1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n} Sn=1+21+31++n1。显然对于任意一个整数 k k k,当 n n n 足够大的时候, S n > k S_n>k Sn>k

现给出一个整数 k k k,要求计算出一个最小的 n n n,使得 S n > k S_n>k Sn>k

输入格式

一个正整数 k k k

输出格式

一个正整数 n n n

样例 #1

样例输入 #1

1

样例输出 #1

2

提示

【数据范围】

对于 100 % 100\% 100% 的数据, 1 ≤ k ≤ 15 1\le k \le 15 1k15

【题目来源】

NOIP 2002 普及组第一题


写一个累加器和一个溢出灯就行。

以后可能会将回归性函数称为器,分类性函数称为灯。

#include
using namespace std;

bool excess(double sn,double k){ //溢出灯
	return sn > k;
}

int main(){
	int i=1;
	double sn=0,k;
	cin>>k;
	while(1){ //累加器
		sn += (double)1/(double)(i++);
		if(excess(sn,k)) {cout<<i-1;break;}
	}
	return 0;
}

你可能感兴趣的:(code,洛谷题解,c++,算法)