每日一道算法题 查找组成一个偶数最接近的两个素数

题目

查找组成一个偶数最接近的两个素数_牛客题霸_牛客网 (nowcoder.com)

Python

# 除了4外,只有奇数才可能是素数
# 奇+奇=偶
def  odd_is_prime(odd):
    # 判断一个奇数是否为素数
    for i in range(3,int(odd**0.5+2),2):
        if odd%i==0:
            return False
    return True

# 两个最近的素数会分布在num//2(奇数)两边
num=int(input())
if num==4:
    print(2)
    print(2)
else:
    medium=num//2
    if medium%2==0:
        medium-=1
    for o in range(medium,0,-2):
        if odd_is_prime(o) and odd_is_prime(num-o):
            print(o)
            print(num-o)
            break

C++

#include <iostream>
using namespace std;

bool odd_is_prime(int odd)
{
    for(int i=3;i*i<=odd;i+=2)
        if(odd%i==0) return false;
    return true;
}


int main() 
{
    int num;
    cin>>num;
    if(num==4)
    {
        cout<<2<<'\n'<<2;
        return 0;
    } 
    int medium=num/2;
    if (medium%2==0) medium-=1;
    for(int o=medium;o>0;o-=2)
    {
        if(odd_is_prime(o)&&odd_is_prime(num-o))
        {
            cout<<o<<'\n'<<(num-o);
            break;
        }
    }
   return 0; 
}
// 64 位输出请用 printf("%lld")

C语言

#include <stdio.h>

int odd_is_prime(int odd)
{
    for(int i=3;i*i<=odd;i+=2)
    if(odd%i==0) return 0;
    return 1;
}


int main() 
{
    int num;
    scanf("%d",&num);
    if(num==4) printf("%d\n%d",2,2);
    else
     {
        int medium=num/2;
        if (medium%2==0) medium-=1;

        for(int o=medium;o>0;o-=2)
        {
            if(odd_is_prime(o)&&odd_is_prime(num-o))
            {
                printf("%d\n%d",o,num-o);
                break;;
            }
        }
     };

    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值