P1147 连续自然数和
一开始我是分解的n,求得这一段合法连续自然数的中间,只要存在并且左右不超范围即可,然后忘了连续的为偶数也可以,只要两两配对成就行。
sum(1,n)=(r+l)*(l-r+1)/2;
设k1=(r+l),k2=(l-r+1);l=(k2-k1+1)/2,r=(k1+k2-1)/2;
由此可得k1,k2必须一奇一偶。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream> #include <cstdio> #include <cmath> using namespace std; int n; int main(){ scanf( "%d" ,&n); n=2*n; for ( int i=sqrt(n);i>=2;i--){ int kk=n/i,ll=n%i; if (ll==0&&(i+kk)%2!=0) printf( "%d %d\n" ,(kk-i+1)/2,(kk+i-1)/2); } return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步