题目
查找组成一个偶数最接近的两个素数_牛客题霸_牛客网 (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;
}