1. 程式人生 > >JZOJ 5773. 【NOIP2008模擬】簡單數學題

JZOJ 5773. 【NOIP2008模擬】簡單數學題

文章目錄

題目:

傳送門

分析:

在這裡插入圖片描述 根據上面的式子,我們可以得出Nx+1\frac{N}{x}+1為偶數,因為11是奇數,而奇數+奇數才等於偶數,故Nx\frac{N}{x}為奇數,同時也為整數 因為是整數,所以xxNN的約數,這樣以來,我們就可以使用O(n)O(\sqrt{n})的演算法,列舉NN的約數

程式碼:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>  
#include<cstdlib>
#include<algorithm> #include<set> #include<queue> #include<vector> #include<map> #include<list> #include<ctime> #include<iomanip> #include<string> #include<bitset> #include<deque> #include<set> #define LL unsigned long long #define
h happy
#define ch cheap using namespace std; inline LL read() { LL d=0,f=1;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();} return d*f; } vector<LL> v; int main() { LL n=read(); for(LL i=1;i<=
sqrt(n);i++) { if(!(n%i)) { if((n/i)%2) v.push_back(n-i); if(i!=n/i) { LL w=n/i; if((n/w)%2) v.push_back(n-w); } } } sort(v.begin(),v.end()); printf("%d",v.size()-1); if(v.size()>1) { printf(" "); for(int i=1;i<v.size();i++) if(v[i])printf("%llu ",v[i]); } return 0; }