跪求,改下两段小程序

huiguipingdan 2011-04-13 07:36:47
求716539的质因子?

#include<stdio.h>
#include<math.h>
void main()
{
int i,j,n=716539;
for(i=2;i<=sqrt(n);i++)

if(n%i==0)
{
for(j=2;j<=sqrt(i);j++)
if(i%j==0)
printf("zhi yin zi: %d\n",i);
}
}

当A*B=716699时,A+B之和最小为?

#include<stdio.h>
void main()
{
long a,b,min=716699;
for(a=0;a<716699;a++)
for(b=0;b<716699;b++)
if(b*a==716699)
min=a+b>min?min:a+b;
printf("a=%ld ,b=%ld,\n",a,b);
}


...全文
158 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
huiguipingdan 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pamtry 的回复:]

Num 1:
C/C++ code
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,n=716539;
for(i=2;(double)i <= sqrt((double)n);i++)
{
if(0 == n % i)
{
for(j=2;(do……
[/Quote]
貌似我的程序只要加句if(i%j==0) break;
noteboom 2011-04-13
  • 打赏
  • 举报
回复


716539=83*89*97

A+B=7484
沭水河畔 2011-04-13
  • 打赏
  • 举报
回复
貌似我的代码效率要高很多:

#include <stdio.h>
#include <math.h>
#define N 716699
#define true 1

int main(void)
{
int a=(int)sqrt(N);
while(true)
{
if(N%a==0)
{
printf("%d+%d=%d\n",a,N/a,(a+N/a));
break;
}
a--;
}
return 0;
}
delphiwcdj 2011-04-13
  • 打赏
  • 举报
回复

#include<stdio.h>
#define N 716699

int main()
{
long i, j, min = 716699, a, b;

for (i = 1; i < N; ++i)
{
if (N%i == 0)
{
j = N / i;
if (i+j < min)
{
a = i;
b = j;
min = i+j;
}
}
}
printf("%ld = %ld*%ld\n", N, a, b);
printf("%ld = %ld+%ld\n", min, a, b);

return 0;
}
/*
output:

716699 = 563*1273
1836 = 563+1273

*/
delphiwcdj 2011-04-13
  • 打赏
  • 举报
回复
2,

#include<stdio.h>

int main()
{
long i, j, min = 716699, a, b;

for (i = 1; i < 716699; ++i)
{
if (716699%i == 0)
{
j = 716699 / i;
if (i+j < min)
{
a = i;
b = j;
min = i+j;
}
}
}
printf("%ld = %ld+%ld\n", min, a, b);

return 0;
}
l369294289 2011-04-13
  • 打赏
  • 举报
回复
个人觉得第二题可以这样,求出716699的所有因子用数组存起来,然后找出最中间那个因子A,用716699除以A得B,这样的A+B应该最小。。。
pamtry 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 delphiwcdj 的回复:]

C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int n, i;
n = 716539;

printf ("716539 = ");
for (i=2;i<=n;i++)
{
while (n%i==0)
……
[/Quote]

+1,忘记质因数分解后对原数范围进行缩小,这种方式对于可以质因数分解的数,效率会高很多
awsqsh 2011-04-13
  • 打赏
  • 举报
回复
2楼正确 。、。。
pamtry 2011-04-13
  • 打赏
  • 举报
回复
Num 2:
#include<stdio.h>
void main()
{
long a,b,min=716699;
for(a=1;a<716699;a++)
{
if(0 != 716699 % a)
break;
b = 716699 / a;
if((a + b) < min)
min = a + b;
}
printf("Min A+B is: %d", min);
}
delphiwcdj 2011-04-13
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int n, i;
n = 716539;

printf ("716539 = ");
for (i=2;i<=n;i++)
{
while (n%i==0)
{
printf ("%d*",i);
n=n/i;

}
}
printf ("\b");

system("pause");
return 0;
}
pamtry 2011-04-13
  • 打赏
  • 举报
回复
Num 1:
#include<stdio.h>
#include<math.h>
void main()
{
int i,j,n=716539;
for(i=2;(double)i <= sqrt((double)n);i++)
{
if(0 == n % i)
{
for(j=2;(double)j <= sqrt((double)i);j++)
if(i%j==0) break;
if((double)j > sqrt((double)i))
printf("zhi yin zi: %d\n",i);
}
}
}

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧