今天,我给大家介绍一些 c++常见头文件和模板,希望能给大家一些帮助!(第二次更新)

今天,我给大家介绍一些 c++常见头文件和模板,希望能给大家一些帮助!

--------------------------------------------------------------------------------

一、常见模板:

      (1)判断质数。

            判断质数就是从2开始枚举到根号n,如果有一个数能被n整除,说明它是一合数,相反如果成功则说明它是一质数。

#include<iostream>
#include<cmath>
using namespace std;
int pan(int n){
    for(inti=2;i<sqrt(n);i++){
        if(n%i==0)
            return false;
    }

    return true;
}
int main(){
    int n;
    cin>>n;
    if(pan(n))
        cout<<"NO"<<endl;
    else 
        cout<<"YES"<<endl;
     return 0;
}

有以下例题:

素数对

总时间限制:           内存限制:
1000ms              65536kb
描述

两个相差为2的素数称为素数对,如5和7,17和19等,本题目要求找出所有两个数均不大于n的素数对。

输入
一个正整数n。1 <= n <= 10000。
输出
所有小于等于n的素数对。每对素数对输出一行,中间用单个空格隔开。若没有找到任何素数对,输出empty。
样例输入
100
样例输出
3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73
这就是从小于n的所有数中筛选出素数,再来判断它减2是否也为素数,很简单~

代码如下:

#include<bits/stdc++.h>
int kk(int a)//把判断闰年写成函数,使程序简便
{
	int i;
	for(i=2;i<=a-1;i++)
	{
		if(a%i==0)
			return 0;
	}
	return 1;
}
int main ()
{
	int n,i,k;
	scanf("%d",&n);
	for(i=5;i<=n;i++)
	{
		k=i-2;
		if(kk(k)==1&&kk(i)==1)
			printf("%d %d\n",k,i);
	}
	if(n<=4)
		printf("empty");
    return 0;
}

--------------------------------------------------------------------------------

             (2)求两数的最大公因数和最小公倍数

                  一般的做法是分别枚举两数的公因数,从中找出最大的,就是它们的最大公因数,但这样比较耗时,所以我给大家推荐欧几里德的辗转相除法:

                 度娘介绍该算法链接如下:

   辗转相除法

              

#include<cstdio>
int main()
{
	long long a,b,c;
	scanf("%lld%lld",&a,&b);
	while(c!=0)
	{
		c=a%b;
                if(c==0)//c等于0意味着此时除数b为最初a,b的最大公因数
                   break;
		a=b;//每一次把所除后的除数的值给被除数,余数的值给除数,以达到循环求最大公因数的目的
		b=c;
	}
	printf("%lld",b);
	return 0;
}
           这一算法是一十分神奇的算法,我们不得不被古希腊人的智慧所震撼(mēng bī)!!

       有以下例题:

最接近的分数

总时间限制:             内存限制:
1000ms           65536kb
描述

分母不超过 N 且 小于 A/B 的最大最简分数是多少?

输入
三个正整数N,A,B,相邻两个数之间用单个空格隔开。1 <= A < B < N <= 1000。
输出
两个正整数,分别是所求分数的分子和分母,中间用单个空格隔开。
样例输入
100 7 13
样例输出
50 93

         分析:做这道题我们用双重循环来进行枚举,外层循环枚举分母B,内层循环枚举分子A,再用两个变量来存储运算中的算出来的临时的“分母不超过 N 且 小于 A/B 的最大最简分数”,而判断分子分母是否“最简”,则判断它们的最大公因数是否为1,而求两数最大公因数则用辗转相除法~~,代码如下:

#include<cstdio>
int main()
{
	double n,a,b,i,j,x,y,c=1,h=0,k=1,z;//定义为double主要是为了判断值是否小于z
	int o,p;
	scanf("%lf%lf%lf",&n,&a,&b);
	z=a/b;
	for(j=1;j<=n;j++)//i为分母
	{
		for(i=1;i<j;i++)//j为分子
		{
			y=i/j;
			if(y<z)
			{
				o=i;
				p=j;
				while(c!=0)//进行辗转相除法
				{
					x=o%p;
					if(x==0)
						break;
					o=p;
					p=x;
				}
				if(p==1)//判断分子分母是否互质
				{
					if(h/k<i/j){
					h=i;
					k=j;}
				}
			}
		}
	}
	printf("%d %d",int(h),int(k));
	return 0;
} 
再来一道题,这道题更是完美诠释了辗转相除法:


猜你喜欢

转载自blog.csdn.net/qq_37555704/article/details/72466040
今日推荐