萌新蓝桥杯打卡 啊哈C语言的逻辑 逻辑挑战8 哥德巴赫的猜想

直入主题 今天习题来自 啊哈添柴oj

首先告知 以下三题 都与质数有关

第一题

第一题入门题
在这里插入图片描述看到算质数 可以想到用到循环 因为不知道结束条件 那么就可以设置一个没有限制条件的for循环 然后最后把他给break啦
然后就是质数的判断了 作为蓝桥杯常考点 一定要非常清楚哦
直接上代码

#include <bits/stdc++.h>
using namespace std;
int main(){
   int n,i,j,k,t=0;
	cin>>n;
	for(i=2;;i++){
		k=0;
	    for(j=2;j*j<=i;j++){
	    	if(i%j==0)
	    	{
	    		k++;
	    		break;
	    	}
	    }
	    if(k==0)t++;
	    if(t==n){	
		cout<<i<<endl;
		break;
	    }
	}
	return 0;
}

第二题

在这里插入图片描述题目看似变得有了一点点复杂的样子
那么这里的关键其实就是一个思维的转换
我一开始拿到手,我想的是枚举两个数即a b,然后去判断是否a+b=n (n是输入值),那么如果继续想下去会陷入一个思维的障碍中去,如何才能枚举两个数?所以机智的我想到了 其实b可以用n-a获得 然后再判断b是不是质数不就好了吗。
在这里我们把个数用cnt来逐个递增计算即可。

#include <bits/stdc++.h>
using namespace std;
int main(){
   	int n;
   	cin>>n;
   	int b,k,l,cnt=0;
   	for(int a=2;a<=n/2;a++){
   	  	k=0;
		for(int i=2;i*i<=a;i++){
   			if(a%i==0){
   			k++;
   			break;
			 }
   		}
   		if(k==0) {
			b=n-a;
			l=0;
			for(k=2;k*k<=b;k++){
				if(b%k==0){
					l++;
					break;
				}
			}
			if(l==0)
			cnt++;
			}
		}
		cout<<cnt;
		return 0;	
}

第三题

在这里插入图片描述
第三题最为最后一题,还是有那么一丢丢别致的啦,别致在哪里呢,那就是在于,如果要写出每一个具体组合的话,按照前两种的套路似乎是行不通的,那么这道题我们想到用一个更简单的方法,定义一个is_prime函数来判断他是否为质数,配合上布尔变量,简直美妙。

#include <bits/stdc++.h>
using namespace std;
bool is_prime(int n){
	if(n==0||n==1) 
	return 0;
	for(int i=2;i*i<=n;i++)
		if(n%i==0) 
		return 0;
	return 1;
}
int main()
{
	int a,n;
	cin>>n;
	for(a=2;a<=n/2;a++)
		if(is_prime(a)&&is_prime(n-a))
		cout<<a<<"+"<<n-a<<endl;
	return 0;
}

结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KK.布达特罗

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值