急!!求C语言大牛解答两道题~~~!!!

从键盘任意输入一个整数m,若m不是素数,则对m进行质因数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否则输出"Itisaprimenumber\n"。例如,用... 从键盘任意输入一个整数m,若m不是素数,则对m进行质因数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否则输出"It is a prime number\n"。例如,用户输入90时,程序输出90 = 2 * 3 * 3 * 5;用户输入91时,程序输出"It is a prime number\n"。
素数(Prime Number),又称为质数,它是不能被1和它本身以外的其他整数整除的正整数。按照这个定义,负数、0和1都不是素数,而17之所以是素数,是因为除了1和17以外,它不能被2~16之间的任何整数整除。
要用函数哦。

如果一个正整数m的所有小于m的不同因子(包括1)加起来正好等于m本身,那么它就被称为完全数(Perfect Number)。例如,6就是一个完全数,是因为6 = 1 + 2 + 3。请编写一个判断完全数的函数IsPerfect(),
函数功能:判断完全数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数。
在主调函数中,输入一个数,调用子函数IsPerfect(),根据函数的返回值,判断从键盘输入的整数是否是完全数。
展开
 我来答
tian_et
推荐于2016-07-05 · TA获得超过783个赞
知道小有建树答主
回答量:334
采纳率:0%
帮助的人:316万
展开全部
/*******************************************************************************
从键盘任意输入一个整数m,若m不是素数,则对m进行质因数分解,
并将m表示为质因数从小到大顺序排列的乘积形式输出,否则输出
"It is a prime number\n"。例如,用户输入90时,程序输出90 = 2 * 3 * 3 * 5;
用户输入91时,程序输出"It is a prime number\n"。
素数(Prime Number),又称为质数,它是不能被1和它本身以外的其他整数整除的正整数。
按照这个定义,负数、0和1都不是素数,而17之所以是素数,是因为除了1和17以外,
它不能被2~16之间的任何整数整除。
要用函数哦。
*******************************************************************************/
#include<stdio.h>
#include<math.h>
/**
*递归函数,输出因子的乘积
*/
void printProduct(long number)
{
long i;
for(i = 2; i <= sqrt(number); i++) {
if(number % i == 0)
{
long biggestFactor = number / i; //最大因子
printf("%ld * ", i);
printProduct(biggestFactor);
break;
}
}
if(i > sqrt(number)) //如果不能因式分解,就输出本身
{
printf("%ld\n", number);
}

}
/**
*判断是否为素数的函数,是返回1,否返回0
*/
int isPrime(long number)
{
long i;
for(i = 2; i <= sqrt(number); i++) {
if(number % i == 0) {
return 0;
}
}
return 1;
}
int main()
{

long number;
int i;
printf("请输入一个数:");
scanf("%ld", &number);

if(isPrime(number) == 1)
{
printf("It is a prime number\n");
}
else
{
printf("%ld = ", number);
printProduct(number);
}
}

/*
如果一个正整数m的所有小于m的不同因子(包括1)加起来正好等于m本身,
那么它就被称为完全数(Perfect Number)。例如,6就是一个完全数,
是因为6 = 1 + 2 + 3。请编写一个判断完全数的函数IsPerfect(),
函数功能:判断完全数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数。
在主调函数中,输入一个数,调用子函数IsPerfect(),根据函数的返回值,判断从键盘
输入的整数是否是完全数。
*/

#include<stdio.h>
#include<math.h>
int isPerfect(long number)
{
long i;
long sum = 1;
long factorPool[1000]; //因子池数组
int j = 0; //因子池数组下标
for(i = 2; i <= sqrt(number); i++)
{
if(number % i == 0)
{
factorPool[j++] = i;
factorPool[j++] = number / i;
sum += i;
sum += number / i;
}

}
if(sum == number)
{
int k;
printf("%ld = 1 + ", number);
for(k = 0; k < j - 1; k++)
{
printf("%ld + ", factorPool[k]);
}
printf("%ld", factorPool[k]);
return 1;
}
else
{
return 0;
}
}
int main()
{
long number;
printf("请输入一个数:");
scanf("%ld", &number);

if(isPerfect(number))
{
printf(",所以是完全数。\n");
}
else
{
printf("%d 不是完全数。\n", number);
}

}
顺便提一下楼上在第二题有误,33550336是一个完全数,用楼上程序去判断程序直接崩溃
AnbaVemByYh10
2012-04-29 · 贡献了超过113个回答
知道答主
回答量:113
采纳率:0%
帮助的人:15.1万
展开全部
拜托,,9是合数,不是素数。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoalyg
2012-04-29 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2347万
展开全部
/*
Enter a integer : 567
567 = 3×3×3×3×7
567 is not perfect number.
Press any key to continue
*/
#include <stdio.h>
#include <math.h>

int isPrime(int n) {
int flag = 1,i;
for(i = 2;i <= sqrt(n)&&flag == 1;i++)
if(n%i == 0) flag = 0;
return(flag);
}

void dissociation(unsigned num) {
unsigned long i;
int b = 0;
if(isPrime(num)) {
printf("%u is a prime number.\n",num);
return;
}
printf("%u = ", num);
for(i = 2;num > 1;i++) {
if(num % i == 0) {
num /= i;
if(b == 1) printf("×%lu",i);
else {
printf("%lu",i);
b = 1;
}
i--;
}
}
printf("\n");
}

void isPerfect(unsigned num) {
unsigned i,n = 0,sum = 1,a[20] = {0};
for(i = 2; i <= num/2; ++i) {
if(num % i == 0) {
sum += i;
a[n++] = i;
}
}
if(sum == num) {
printf("%d = 1",num);
for(i = 0; i < n; ++i)
printf(" + %d",a[i]);
printf("\n");
}
else printf("%d is not perfect number.\n",num);
}

int main() {
unsigned num;
printf("Enter a integer : ");
scanf("%u",&num);
dissociation(num);
isPerfect(num);
return 0;
}
追问
。。。。。大牛这是两道题。。。T-T
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式