当前位置: 代码迷 >> C语言 >> [求助]ACM中的题目
  详细解决方案

[求助]ACM中的题目

热度:262   发布时间:2006-04-16 02:27:00.0
以下是引用steven4ilove在2006-4-16 1:30:00的发言:

啊?哪?错?我新手。多指教~
不过上面的是没问题的。绝对可行,我用的是turboc3.0



为什么呢?为什么呢? 当n是素数。那显然n*n 是满足的,可你这程序没考虑到这个。不过思路很好
----------------解决方案--------------------------------------------------------

哦 原来是题意的理解,我以为他说的两个质数相乘条件是两个不同的质数,所以把一个质数自乘筛掉了
现在明白了 谢谢

[此贴子已经被作者于2006-4-16 3:13:19编辑过]


----------------解决方案--------------------------------------------------------

例如3*3=9,5*5=25,11*11=121。。。。就是这仅有的两个素因子相同,你这程序没考虑到


----------------解决方案--------------------------------------------------------

#include <math.h>

int IsPrime(int m)
{
int i;
for(i = 2;i <= (int)(sqrt(m));i++)
{if(m % i == 0) return 0;
else return 1;
}
}

int IsProNum(int n)
{
int i, j, t;
for(i = 2;i <= n;i++)
if(IsPrime(i))
for(j = 2;j <= n;j++)
{if(IsPrime(j)) t = j * i;
if(t == n) return 1;
else if(t > n) return 0;
}
}

main()
{
int n;
printf("Enter a number:\n");
scanf("%d", &n);
if(IsProNum(n)) printf("It's a MaoLaoDa number.\n");
else printf("It's not a MaoLaoDa number.\n");
}



----------------解决方案--------------------------------------------------------
#include"stdio.h"
main()
{
int a,b=0,d=0,i=2,j=2;
scanf("%d",&a);
if(a<=2)printf("这不是一个猫老大数\n");
else {
for(;i<a;i++)
{
if(a%i==0)b++;
}
for(;j<a;j++)
{
if(a%j==0)d++;
if(a==j*j)d++;
}
if(b==2||d==2)printf("这是一个猫老大数\n");
else printf("这不是一个猫老大数\n");
}
}

这次加上N*N的情况了~~
----------------解决方案--------------------------------------------------------
  相关解决方案