用程序实现分解质因数
答案:3 悬赏:70 手机版
解决时间 2021-08-11 05:03
- 提问者网友:世勋超人
- 2021-08-10 14:21
求算法 时间复杂度要低一点
最佳答案
- 五星知识达人网友:独钓一江月
- 2021-08-10 15:28
你所说的数是多大以内的,假设是m,那么你先用筛选法选出 m以下的素数,然后用最小的开始除原来的数并输出每次的除数,每当不能整除时,素数的计数器加1,当数组内元素大于被除数时,则结束循环,被除数为最后一个因子
int s[100] //假设这个是存放m以下素数的数组
for(i=0; ;i++)
{
if(s[i]>m)
{
cout<<m<<endl;
break;
}
while(m%s[i]==0)
{
m%=s[i];
cout<<s[i]<<" ";
}
}大致是这样,输出格式之类的根据需求自己控制下吧,在分解前用筛选法先准备好素数对提高效率是很多的
全部回答
- 1楼网友:十年萤火照君眠
- 2021-08-10 17:07
#include<stdio.h>
#include<math.h>
int main() {
int i,b;
long long in;
freopen("F://1.txt","r",stdin);
freopen("F://2.txt","w",stdout);
while(scanf("%lld",&in)!=EOF) {
b=0;
for(i=2;in!=1;i++)
if(in%i==0) {
in/=i;
b?printf(" %d",i):printf("%d",i),b=1;
i--;
}
printf("\n");
}
return 0;
}
- 2楼网友:低音帝王
- 2021-08-10 16:55
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void pr(long p, int i);
int main()
{
int i;
long x, x2, p;
char s[512];
for (;;) {
printf( "\n> ");
gets(s);
x = atol(s);
pr(x, 0);
if (x < 2) break;
p = 2;
for (i = 0; (x % p) == 0; i++)
x /= p;
if (i > 0) pr(p, i);
if (x == 1) continue;
x2 = (long)sqrt((double)x);
for (p = 3; p <= x2; p += 2) {
for (i = 0; (x % p) == 0; i++)
x /= p;
if (i > 0) pr(p, i);
x2 = (long)sqrt((double)x);
}
if (x > 1) pr(x, 1);
}
return 0;
}
void pr(long p, int i)
{
static char c = '= ';
if (i == 0) {
printf( "# %ld ", p);
c = '= ';
}
else {
printf( " %c %ld ", c, p);
if (i > 1) printf( "^%d ", i);
c = '* ';
}
}
运行结果如下:
> 123456
# 123456 = 2^6 * 3 * 643
> 1234567890
# 1234567890 = 2 * 3^2 * 5 * 3607 * 3803
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯