嗯...
这或许也算一道数论题吧...
题目链接:https://www.luogu.org/problemnew/show/P1579
这道题的说明好像只会扰乱人的思路....然后就是这道题的细节比较多...
首先做的时候总是50分、70分...
然后发现有两个细节:
1、j不能从i开始循环,而要从2开始循环
2、k不一定是一个正数,所以要加一层判定(n == 97)
思路:
读入------>欧拉筛判质数------>暴力枚举------->判断输出
AC代码:
1 #include<cstdio> 2 #include<iostream> 3 4 using namespace std; 5 6 7 const int maxn = 20005; 8 int n, cnt; 9 int prime[maxn], vis[maxn], pp[maxn]; 10 inline void is_prime(){ 11 for(int i = 2; i <= n; i++){ 12 if(!vis[i]) prime[++cnt] = i, pp[i] = 1; 13 for(int j = 1; j <= cnt && i * prime[j] <= n; j++){ 14 vis[i * prime[j]] = 1; 15 if(i % prime[j] == 0) break; 16 } 17 } 18 } 19 20 int main(){ 21 scanf("%d", &n); 22 is_prime(); 23 for(int i = 2; i <= n; i++){ 24 for(int j = 2; j <= n; j++){ 25 //for(int j = i; j <= n; j++) 26 int k = n - i - j; 27 if(k >= 2){ //97 28 if(!vis[i] && !vis[j] && !vis[k]){ 29 printf("%d %d %d", i, j, k); 30 return 0; 31 } 32 } 33 } 34 } 35 return 0; 36 }