解题思路:已知:n=i*(n/i),其中i与n/i都为质数,求最大质数。
因此,只需要将i从最小质数开始算,当i和(n/i)都为质数时,(n/i)变为最大质数。//(因为i为最小)
只需要在以上思路加上一个判断数值是否为质数的函数即可。
质数:只能被1和自身整除的数。
为何使用sqrt(n):36=6*6=12*3=4*9,sqrt(36)=6,25=5*5所有数的其中一个乘数一定小于等于sqrt(n)因此判断一个数n是否是质数只需要判断这个数是否能被2~sqrt(n)整除即可。36不是质数,25也不是质数。
注意事项:
参考代码:
#include <stdio.h>
#include <math.h>
int prime(int n)//判断数值是否为质数
{
int i=0;
int isprime=1;
for(i=2;i<sqrt(n);i++)
{
if(n%i==0)
{
isprime=0;
break;
}
}
return isprime;
}
int main()
{
int n=0;
scanf("%d",&n);
int i=0;
for(i=2;i<=sqrt(n);i++)//其中一个乘数一定小于等于sqrt(n)
{
if(n%i==0&&prime(i)&&prime(n/i))
{
if(i>=n/i)
{
printf("%d",i);
}
else
{
printf("%d",n/i);
}
}
}
return 0;
}
0.0分
1 人评分
简单编码 (C++代码)浏览:730 |
【数组的距离】 (C语言代码)浏览:787 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:732 |
三角形 (C++代码)递推浏览:825 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:606 |
1124题解浏览:630 |
有关字符,字符串的输入输出函数说明浏览:498 |
字符串比较 (C语言代码)浏览:770 |
字符删除 (C语言代码)浏览:767 |
简单的a+b (C语言代码)浏览:491 |