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

[求助]ACM中的题目

热度:322   发布时间:2006-04-11 23:39:00.0
[求助]ACM中的题目

Problem

猫老大很喜欢研究数字,特别是喜欢质数。一天,猫老大发现有一些数字可以表示成两个质数相乘的形式。比如,10=2×5. 2,5都是质数,所以 10 是一个“猫老大数 ”。所以猫老大决定考考彩虹,他告诉彩虹一个数 n ,判断 n 是不是“猫老大数”?

Input

此题含多组数据,每组数据为一个数 n (1<=n<=2^31-1).

Output

对于每组数据输出一行,如果 n 是一个“猫老大数”则输出 “It's a MaoLaoDa number.” 否则输出“It's not a MaoLaoDa number.”

Sample Input

10

Sample Output

It's a MaoLaoDa number.

我解的是这样:

#include
main()
{
int n;
scanf("%d",&n);
if(n%10)
printf("It's not a MaoLaoDa number.");
else
printf("It's a MaoLaoDa number.");
}

但这样的是不对的,请问是怎么回事,我自己也试了一下,输入大整数的时候就不对了,请教是哪里出错了.

谢谢!!

搜索更多相关的解决方案: ACM  

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

你这想法。。。
[CODE]
#include <stdio.h>
#include <conio.h>
#include <math.h>
int Prime(long);
void main()
{
long n,i,j,m;

scanf("%ld",&n);
m=sqrt(n);
for(i=2;i<=m;i++) /*这里3以后可以每次加2,自己改*/
{
if(n%i!=0)
continue;
j=n/i;
if( Prime(i) && Prime(j) )
{
printf("It's a MaoLaoDa number.\n");
break;
}
}
if(i>m)
printf("It's not a MaoLaoDa number.\n");
getch();
}

int Prime(long n)
{
int i,j;

i=sqrt(n);
for(j=2;j<=i&&n%j!=0;j++);
return j>i ? 1:0 ;
}

[/CODE]


----------------解决方案--------------------------------------------------------
谢谢!现在还不是很懂,研究一下!
----------------解决方案--------------------------------------------------------

#include "iostream.h"
int a[100];
int n=0;
int zhishu(int m)//判断该数的因数是不是质数
{
for(int i=1;i<=m/2;i++)
{
if(m%i==0)
{return 0;
break;
}
}
if(i>m/2)
return 1;
}
void yinshu(int m)//求出该数所有的因数
{
for(int i=1;i<=m;i++)
{
if(m%i==0)
{
a[n]=i;
n++;
}
}
cout<<n<<endl;//输出因数的个数
}
void main()
{
int b[100],m,q=0,flag=1;
cout<<"请输入一个数";
cin>>m;
yinshu(m);
for(int i=0;i<n;i++)
{
cout<<a[i]<<endl;//输出所有的因数
if(zhishu(a[i])==1)
{
b[q]=a[i];
}
q++;
}
for(i=1;i<q-2;i++)
for(int j=i+1;j<q-2;j++)
{
if(b[i]*b[j]==m)
{
flag=1;
break;
}
else flag=0;
}
if(flag==1)
cout<<"这是一个“猫老大数”";
else
cout<<"这不是一个“猫老大数”";
}


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

为什么非要用C++? 除了头文件,输入输出函数不同,没别的区别(这函数)


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

2好像不能通过了?????


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

不能通过那是编译器不同


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

楼上逻辑错误


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

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

[此贴子已经被作者于2006-4-16 1:38:52编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案