判断素数用sqrt?
我们假设一个数a;
那么a=(a ^ 1/2)*(a ^ 1/2);
如果a不是素数;
那么a有一个因子b,使得 a=b * c;
那么a的因子中(b或c)必定有一个是小于等于a ^ 1/2的;
所以判断的时候不用判断到1-a,只需要1-a^1/2; 明白了吧?
//输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
//N为素数时,最长连续因子的个数为1,即它自己。
//N不为素数时,即N为合数时,暴力模拟即可,
//将连续的数进行累积,直到累积后的结果不能被N整除为止,
//这样就能够不断更新最长连续因子的个数,
//预保留第一个数,就可以在最终输出是能够直接输出这几个连续因子。
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n) {
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int n;
cin >> n;
if (isPrime(n) == true) {
cout << 1 << endl;
cout << n << endl;
}
else {
int maxLen = 0, begin_;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
int ans = i;
int j;
for (j = i + 1; j <= sqrt(n); j++) {
ans *= j;
if (n % ans != 0) {
break;
}
}
if (j - i > maxLen) {
maxLen = j - i;
begin_ = i;
}
}
}
cout << maxLen <<endl;
for (int i = begin_; i <= begin_ + maxLen - 1; i++) {
if (i != begin_)cout << "*";
cout << i;
}
}
return 0;
}