其实根本没必要来做素数表
按照分解质因子的方法直接只能够得到素数
#include <cstdio>
#include <cmath>
struct node
{
int x;
int cnt;
}fac[110];
int main()
{
long fn,n,index=0;
scanf("%ld",&fn);
n = fn;
for(int i = 2;i<fn;i++)
{
if(fn%i==0)
{
fac[index].x = i;
fac[index].cnt = 0;
while(fn%i==0)
{
fac[index].cnt++;
fn/=i;
}
index++;
}
}
if(fn!=1)
{
fac[index].x = fn;
fac[index].cnt = 1;
index++;
}
if(n==1)
printf("1=1");
if(n>1)
printf("%d=",n);
for(int i = 0;i<index;i++)
{
printf("%d",fac[i].x);
if(fac[i].cnt>1)
printf("^%d",fac[i].cnt);
if(i!=index-1)
printf("*");
}
// if( isPrime(fac[index - 1].x)==true)
// printf("###1");
return 0;
}
===========================================
错误在于1的时候要输出1=1
hence when there is only one pi , ki
is 1 and must NOT be printed out.
错一个点23分
#include <cstdio>
#include <cmath>
struct node
{
int x;
int cnt;
}fac[110];
bool isPrime(int n)
{
if(n<=1) return false;
for(int i = 2;i<=sqrt(n);i++)
{
if(n%i==0)return false;
}
return true;
}
int pri[1010],temp = 0;
void FindPri(int n)
{
for(int i = 2;i<=n;i++)
{
if(isPrime(i) == true)
pri[temp++] = i;
}
// for(int i = 0;i<temp;i++)
// printf("%d\n",pri[i]);
}
int main()
{
long fn,n,index=0;
scanf("%ld",&fn);
n=fn;
FindPri(1000);
for(int i = 0;i<temp;i++)
{
if(n%pri[i]==0)
{
fac[index].x = pri[i];
fac[index].cnt = 0;
while(n%pri[i]==0)
{
fac[index].cnt++;
n/=pri[i];
}
index++;
}
}
if(n!=1)
{
fac[index].x = n;
fac[index].cnt = 1;
index++;
}
if(fn>1)
printf("%d=",fn);
for(int i = 0;i<index;i++)
{
printf("%d",fac[i].x);
if(fac[i].cnt>1)
printf("^%d",fac[i].cnt);
if(i!=index-1)
printf("*");
}
// if( isPrime(fac[index - 1].x)==true)
// printf("###1");
return 0;
}