嗯...
这或许也算一道数论题吧...
题目链接:https://www.luogu.org/problemnew/show/P1579
这道题的说明好像只会扰乱人的思路....然后就是这道题的细节比较多...
首先做的时候总是50分、70分...
然后发现有两个细节:
1、j不能从i开始循环,而要从2开始循环
2、k不一定是一个正数,所以要加一层判定(n == 97)
思路:
读入------>欧拉筛判质数------>暴力枚举------->判断输出
AC代码:
#include<cstdio>
#include<iostream> using namespace std; const int maxn = ;
int n, cnt;
int prime[maxn], vis[maxn], pp[maxn];
inline void is_prime(){
for(int i = ; i <= n; i++){
if(!vis[i]) prime[++cnt] = i, pp[i] = ;
for(int j = ; j <= cnt && i * prime[j] <= n; j++){
vis[i * prime[j]] = ;
if(i % prime[j] == ) break;
}
}
} int main(){
scanf("%d", &n);
is_prime();
for(int i = ; i <= n; i++){
for(int j = ; j <= n; j++){
//for(int j = i; j <= n; j++)
int k = n - i - j;
if(k >= ){ //
if(!vis[i] && !vis[j] && !vis[k]){
printf("%d %d %d", i, j, k);
return ;
}
}
}
}
return ;
}
AC代码