n 10 18是否能被乙個數的平方整除

2021-06-09 11:24:12 字數 849 閱讀 4149

問n<=10^18是否能被乙個數的平方整除

將n分解為:p1p2pk  其中pi為素數,且pi<=pi+1(這裡可以等於)

若n能被乙個數的平方整除,它肯定能被乙個素因子的平方p^2整除,我們找到最小的這個p即可  ~~~

1.如果p不是最後的素因子,在p之後的素數pi>=p,這時就有n>=p^3了,

即p<=n^(1/3),所以列舉n^(1/3)內的素數看是否p^2|n即可,而n^(1/3)<=10^6

2.如果p是最後的素因子,所以n的形式就是p1p2p'p^2,而p'<=p,所以p'^3<=n,p'<=n^(1/3)

所以可以先將n的這些素因子p1,p2,,p'給去掉,p'<=n^(1/3),所以用n^(1/3)內的素數去除即可

最後只剩下n'=p^2,通過判斷乙個數是否為完全平方數即可

演算法就是預處理10^6內的素數,用這些素數去除n,發現有p^2能整除的return即可

否則判斷剩下的這個n'是否為完全平方數,我用直接開方比較的。。。

#include#include#include#include#include#define ll long long

using namespace std;

bool isp[1000010];

int pr[300000], pn;

void init()}}

}bool work(ll n)

}i=(ll)sqrt(n);

// printf("i=%d\n",i);

if(n==i*i)

return 0;

return 1;

}int main()

}

python判斷乙個數是否能被另乙個整數整除

判斷乙個數是否能被另乙個整數整除是乙個挺簡單的問題,一般乙個模運算就可以搞定了,懶惰的曉萌還是不想自己做,於是找到你幫他寫 你就幫幫他吧。輸入格式 輸入包括兩個由空格分開的整數m 和 n 1 m,n 500 輸出格式 輸出包括一行,如果 m 可以被 n 整除就輸出yes,否則輸出no 結果大小寫敏感...

判斷乙個整數是否能被11整除

如果乙個整數在整型範圍內,直接用求餘符號就能搞定,但是如果這個整數比較大就要另尋他路了。有一種演算法叫做 奇偶位差法 意思就是在奇數字上的數字和與偶數字上的數字和做差,如果這個差的絕對值能被11整除,那麼這個數字就可以被11整除。include include includeint main if ...

判斷乙個數和這個數的重組對8是否能整除的題

小貓很無聊,竟然開始研究數字的整除了,有這樣乙個問題。給定乙個非負整數,問能否重排它的全部數字,使得重排後的數能被8 整除。輸入格式 多組資料,每組資料是乙個非負整數。非負整數的位數不超過 10000 位。輸出格式每組資料輸出一行 yes 或者no 表示能否重排它的全部數字得到能被 8整除的數。注意...