爱问知识人 爱问教育 医院库

c语言,求问编这个程序的人是什么思路?用到哪些数学知识?

首页

c语言,求问编这个程序的人是什么思路?用到哪些数学知识?

Mobius函数见附件#include"stdio.h"#include"math.h"voidmain(){intn,m,a=2,p=0,x,r;printf("pleaseinputanaturalnumber:\n");scanf("%d",&n);r=n;if(n==1)printf("M(1)=1\n");elsedo{x=n%a;switch(x){case0:if((n/a)%a==0)m=0;elsep++;n=n/a;a++;break; }}while(n/a>=1);if(m==0)printf("m=%d\n",m);elsem=pow(-1,p);printf("M=(%d)=%d",r,m);}

Mobius函数见附……
提交回答
好评回答
  • 2012-11-18 00:10:12
      我对程序做了少许改动。有的地方增加括号是为了容易理解,有的地方是必须加上去的。另外,程序的可读性以及优化可以进一步加以考虑。
    #include "stdio。h" 
    #include "math。
      h" void main() { int n,m=1,a=2,p=0,x,r; //a表示因子,首先赋最小的素数2,另外,增加给m赋初值1(不然有漏洞,当然只要取非零整数都行) printf("please input a natural number:\n"); scanf("%d",&n); r=n; if(n==1) printf("M(1)=1\n"); else //n>1 do { x=n%a; switch(x) { case 0: //如果a是n的素数因子 { { if((n/a)%a==0) //如果a因子出现不止1次 m=0; //该函数的值必为0 else //如果a因子只出现1次 p++; //记录只出现一次的因子的个数的变量p自增1 } n=n/a; //从n中去掉一个a因子 a++; //a因子自增1 break; } default : //如果a不是n的素数因子 a++; //a因子自增1 break; } }while(n/a>=1); //当n不等于1时继续循环 if(m==0) //我前面增加给m赋初值1的目的在此 printf("M(%d)=%d",r,m); else { m=(int)pow(-1,p); //可以考虑通过判断p是奇数还是偶数来得到该函数的值 printf("M(%d)=%d",r,m); } } 。

    大***

    2012-11-18 00:10:12

类似问题

换一换
  • 软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):