- 问答
- 2021-03-01 19:15:21 @
我的程序总是没有输出,是不是哪里出错了?
【问题描述】
将一个正整数分解质因数,即分解成若干质数的乘积,若得到的质因数的个数也是一个质数,则称这个数为“幸运数”。例如12=2*2*3,它有3个质因数分别是2、2、3,而3为质数,所以12是一个幸运数。
编程求出不大于n的所有幸运数。
【输入格式】
一行一个正整数n,2<=n<100000。
【输出格式】
若干行,每行一个幸运数。要求从小到大顺序输出。
3 条评论
-
陈烨@吴江区实验初中 (陈烨1) LV 8 @ 2021-03-03 21:36:57
#include <iostream>
using namespace std;
int prime(int n);
int zys(int n);
int main()
{
int x;cin>>x;
for(int j=1;j<=x;j++)
if(prime(zys(j))==1)
cout<<j<<endl;
return 0;
}int zys(int n)
{
int n2,cnt=0;
n2=n;
for(int i=2;i*i<=n2;i++)
{
while(n2%i==0)
{
n2=n2/i;
cnt++;
}
}
if(n2!=1)
cnt++;
return cnt;
}int prime(int n)
{
int i;
for(i=2;i<n;i++)
{
if(n%i==0)
break;
}
return i==n;
} -
2021-03-03 17:27:15@
#include <iostream>
using namespace std;int zxc(int j); //质因数
int zhishu(int xx);//判断质数int main()
{
int n;
cin>>n;
int cnt;
for(int j=2;j<n;j++)
{
int xx=j;
cnt=1;
while(zhishu(xx)==0)
{
cnt++;
xx=xx/zxc(xx);
}
if(zhishu(cnt)==1)
cout<<j<<endl;
}
}int zxc(int j)
{
int n=0;
while(j>1)
{
for(int i=2;i<=j;i++)
{
if(j%i==0)
{j=j/i;
return i;//输出因子
}
}
}
return 0;
}int zhishu(int xx)
{
for(int i=2;i<=xx;i++)//判断质数
{
if(xx%i==0)
return 0;
}
return 1;
} -
2021-03-01 19:38:10@
#include <iostream> using namespace std; int zxc(int j); //质因数 int zhishu(int xx);//判断质数 int main() { int n; cin>>n; int cnt; for(int j=2;j<n;j++) { int xx=j; while(zxc(xx)>1) { cnt=0; if(zxc(xx)>1) { cnt++; xx=zxc(xx); } } if(zhishu(cnt)==1) cout<<j<<endl; } } int zxc(int j) { int n=0; while(j>1) { for(int i=2;i<=j;i++) { if(j%i==0) { j=j/i; return i;//输出因子 } } } return 0; } int zhishu(int xx) { for(int i=2;i<=xx;i++)//判断质数 { if(xx%i==0) return 0; } return 1; }
- 1