2018年9月22日提高組模擬賽 T3 簡單數學題
阿新 • • 發佈:2018-12-11
大意
對於一個正整數,存在一個正整數(),使得的值是正整數
思路
接下來分開
兩邊同時乘2
因為和都是整數,所以也是整數 所以是的約數,即是的約數
又因為是奇數,所以我們一開始讓不斷除以2變成奇數為止,這樣就避免了約數不是奇數的情況,然後列舉因子,排序,去重,輸出即可
程式碼
#include<cstdio>
#include<cmath>
#include<set>
using namespace std;long long n,sqr,t2=1;
set<long long>se;
signed main()
{
scanf("%lld",&n);
sqr=sqrt(n);//計算平方根
while(!(n&1))n>>=1,t2<<=1;//去掉偶因子
if(n==1) return printf("0")&0;
se.insert(n);
for(register int i=3;i<sqr;i++)
if(!(n%i))se.insert(i),se.insert(n/i);//放入
printf("%d",se.size());
for(set<long long>::iterator i=se.begin();i!=se.end();i++)
printf(" %lld",n*t2/(*i)*(*i-1));//輸出
}