In mathematics, a polygonal number is a number represented as dots or pebbles arranged in the shape of a regular polygon. The dots are thought of as alphas (units). These are one type of 2-dimensional figurate numbers. The following picture shows how triangular numbers, square numbers, pentagonal numbers and hexagonal numbers represented as dots arranged in the shape of corresponding regular polygon.
2016 is not only a leap year but also a triangular and hexagonal year. If you are patient enough, you can count the number of the dots in the left triangle or in the right hexagon in the following picture. The number of dots in each shape is 2016.
Therefore, 2016 is a triangular-hexagonal-leap year. The previous triangular-hexagonal-leap year is 1540 and the next is 2556. So living to see 2016 is very rare experience.
You task is to list the triangular-hexagonal-leap years from 2016 to 990528. 990528 is also a triangular-hexagonal-leap year.
This problem has no input.
Please print each triangular-hexagonal-leap year in increasing order.
For example, if you are asked to list the triangular-hexagonal-leap years from 780 to 2556, the output should be:
780 1128 1540 2016 2556
2016 2556 ... <-- some lines are skipped 990528
题意:判断2016--990528中有多少个年份满足1:闰年,2:(2*n-1)*n=year,3.(n+1)*n=year,输出所有的year,就是判断一下闰年还有b*b-4*a*c开根号之后还是不是整数,就是一个一元二次方程求根公式
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; bool is(int x) { return (x%4==0&&x%100!=0)||(x%400==0); } int main() { for(int i=2016;i<=990528;i++) { if(!is(i)) continue; int d=(int)sqrt(8*i+1); if(d*d!=8*i+1) continue; if((d-1)%2) continue; if((d+1)%4) continue; printf("%d\n",i); } return 0; }