1096 Consecutive Factors (20分)
输出:
3
5*6*7
#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 100010;
typedef long long LL;
int main()
{
LL n;
cin >> n;
//ansI连续的第一个数 ansLen
LL sqr = sqrt(n), ansI, ansLen = 0;
for(int i = 2; i <= sqr; i++)
{
int j = i, temp = 1,len = 0,k = 0;
while(1)
{
temp *= j;
if(n % temp != 0) break;
len++;
j++;
if(temp == n) break;
}
if(len > ansLen)
{
ansLen = len;
ansI = i;
}
}
if(ansLen == 0)
{
cout << "1" << endl;
cout << n;
}
else
{
cout << ansLen<< endl;
int m = 0;
cout << ansI;
while(m < ansLen -1)
{
printf("*%lld",ansI+(++m));
}
}
return 0;
}
1059 Prime Factors (25分)
#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 1000100;
typedef long long LL;
struct factor
{
int x;
int cnt;
}fac[maxn];
//打印素数表 prime数组中存放素数
int prime[maxn], pNum = 0;
bool p[maxn] = {
0};
void find_prime()
{
for(int i = 2; i <= maxn; i++)
{
if(p[i] == false)
{
prime[pNum++] = i;
for(int j = i + i; j <= maxn; j += i)
{
p[j] = true;
}
}
}
}
int main()
{
LL n,k;
cin >> n;
k = n;
find_prime();
int j = 0; //记录因子
//找因子 求因子个数
for(int i = 0; i < pNum; i++)
{
if(n % prime[i] == 0)
{
fac[j].x = prime[i];
fac[j].cnt = 0;
//求因子个数
while(n % prime[i] == 0)
{
fac[j].cnt++;
n = n / prime[i];
}
j++;
}
else continue;
}
if(n == k) printf("%lld=%lld\n",k,k);
else
{
printf("%lld=%d",k,fac[0].x);
if(fac[0].cnt >=2)
{
printf("^%d",fac[0].cnt);
}
for(int i=1; i < j;i++)
{
printf("*%d",fac[i].x);
if(fac[i].cnt >=2)
{
printf("^%d",fac[i].cnt);
}
}
}
return 0;
}