日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【枚举】连续自然数和(jzoj 2102)

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【枚举】连续自然数和(jzoj 2102) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

連續自然數和

題目大意:

輸出一個n,求出所有相加等于n的連續自然數序列

樣例輸入

10000

樣例輸出

18 142

297 328

388 412

1998 2002

數據范圍限制

10 <= M <= 2,000,000

解題思路:

這道題的正解的時間復雜度是o(2n)o\left ( \sqrt{2n} \right )o(2n?)但因為我太蒟了,所以只用了o(n/2)o\left ( n/2 \right )o(n/2)的方法,o(n/2)o\left ( n/2 \right )o(n/2)的方法就是先枚舉2~n/2+1然后把這些數字當做奇數序列的中心,若可以被n整除,就往左右兩邊分別擴(n/i-1)/2個數字(首先把自己的那一份去掉在平分兩邊),然后把兩個數字的和當做偶數數列的中心,若可以被整除,就往左右分別擴n/(i+i-1)-1個數字(前面是兩個相連的數,然后去掉一份,因為他的一份是兩個數字,所以*2/2抵消)

#include<cstdio> #include<iostream> #include<cstring> using namespace std; int n,l; int main() {scanf("%d",&n);for (int i=2;i<=n/2+1;i++)//一半以上是不可能的,但要到n/2+1例如5可以2+3(n/2+1){if ((n%i==0)&&((n/i)&1))//奇數數列判斷是否整除,和是否有奇數份{l=(n/i-1)/2;//往兩邊擴if (i>l&&i+l<n)//判斷是否出界printf("%d %d\n",i-l,i+l);}if (n%(i+i-1)==0)//判斷是否整除{l=n/(i+i-1)-1;//往兩邊擴if(i>l+1&&i+l<n)//判斷是否出界printf("%d %d\n",i-l-1,i+l);//i-1占了一個位}}return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【枚举】连续自然数和(jzoj 2102)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。