(本题取 $n=1000$)
【思路】由于范围不大,因而可以直接 $\mathcal O(n^2)$ 枚举,然后套上质数的判断即可。由于待判断的数大小不确定,因而用质数判断函数来代替欧拉筛:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include<stdio.h> #include<stdbool.h> int maxn,ans; bool prime(int x) { if(x<2)return false; if(x==2||x==3||x==5)return true; if(x%2==0||x%3==0||x%5==0)return false; for(int a=7,b=11;a*a<=x;a+=6,b+=6)if(x%a==0||x%b==0)return false; return true; } int main() { for(int a=-999;a<=999;++a) { for(int b=-1000;b<=1000;++b) { int n=0; while(prime(n*n+a*n+b))++n; if(n>maxn) { maxn=n; ans=a*b; } } } printf("%d",ans); return 0; }
|