C语言 简单数学

Problem Description
新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来。
Input
第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数N(1<n<32768),表示会员人数。
Output
对于每一个N,输出一行新朋友的人数,这样共有CN行输出。

Sample Input
2
25608
24027

Sample Output
7680
16016
我的代码
#include<stdio.h>
int gcd(int m,int n)
{
int r;
r=m%n;
while(r)
{
m=n;
n=r;
r=m%n;
}
return n;
}
int main ()
{
int m,n,i,j;
while(~scanf("%d",&m))
{
for(j=0;j<m;j++)
{
scanf("%d",&n);
int flag=0;
for(i=1;i<n;i++)
{
if(gcd(i,n)<1||gcd(i,n)==1)
{
flag++;
}
}
printf("%d\n",flag);
}
}
return 0;
}
超时了 怎么改啊

这题目可以用欧拉函数来解决,你这样的算法法是O(n log n)肯定过不了啊,数据太多了

# include <stdio.h>
#include<string.h>

int main (void)
{

int n,T,ans,i;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
ans=n;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
ans=ans-ans/i;
while(n%i==0)n/=i;
}
}
if(n>1)ans-=ans/n;
printf("%d\n",ans);
}
return 0;

}
/*
25608
24027
*/
试试看行不行
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-22
这道题的本质其实就是求N的欧拉函数值,你可以看下数论的书或者百度下。
第2个回答  2012-02-16
第3个回答  2012-02-16
baidu

C语言 从键盘输入一个简单的数学表达式,计算并显示该表达式的值 求算法...
int i = 0;printf("请输入简单表达式!\\n");scanf("%c", ¤t_char);while (current_char >= '0' && current_char <= '9'){\/\/输入第一个变量 var1[i++] = current_char;scanf("%c", ¤t_char);} if ( i > 0 ){\/\/第一个操作数合格 flag1 = true; \/\/保存好...

c语言 输入一个简单数学的表达式,最后输出此表达式并得出结果,怎么做...
int main() {float a,b;char op;scanf("%f%c%f=", &a, &op, &b);switch (op) {case '+':printf("%f", a+b);break;case '-':printf("%f", a-b);break;case '*':printf("%f", a*b);break;case '\/':if (b) printf("%f", a\/b);break;}return 0;} ...

C语言计算器 功能要求: 可以输入0-9数字、小数点、正负数 可以进行加 ...
下面是使用 C 语言设计简易科学计算器的示例代码:include <stdio.h> include <stdlib.h> include <math.h> int main(){ char op;double num1, num2;printf("请输入数学表达式(如:1 + 2):");scanf("%lf %c %lf", &num1, &op, &num2);switch (op){ case '+':printf("结果...

用C语言编简单的数学计算 程序,,1、 要求输入题目数 2、随机选择+...
b,i,op,r,c=0;\/\/c表示答对题目数,r记录回答结果 int n,s;printf("您希望出多少道题目\\n");scanf("%d",&n);s=n; while(n--) { srand(time(0)); a = rand() % 10 + 1; b = rand() %

c语言 数学简单计算5
代码如下:include<stdio.h> include<math.h> main(void){ double x=0;x=(2*sqrt(5)*(sqrt(6)+sqrt(3)))\/(6+3);printf("%g\\n",x);} 以下为运行结果:

用C语言计算简单的数学题
double s, t; K=1; s=0; for(i=1;i<=10;i++){ t=t*t; s=s+k*(2*i-1)*(2*i+1)\/(t*t); K=k*(-1); } Printf(“%f”,s);}解释一下:t是分母,每次乘以2 K是控制+和-的,每次乘以-1可以加减交替。

C语言的学习需要牵扯的数学知识有哪些?
C语言用到的数学知识是很广泛的。我记得我们的老师说过:“如果一个学数学的跟一个学编程的去应聘,受聘的一定是那个学数学的。”所以学好编程的基础是学好数学,作为ACMer,这里我简单地说几个:1.微积分。这是最基础的,一定要学好。2.离散数学,离散数学中有很多东西都需要,当然我在这里不能举例...

c语言中的数学公式是怎么来的?
开头必须有一个数学函数库 #include<math.h> 然后一般常用的sin(x)cos(x)tan(x)其中的x必须要以弧度为单位。如果以“度”为单位,比如说求30度的正弦值,要用sin(x*180\/3.1415926)的形式arcsin(x)arccos(x)arctan(x)arccot(x)以上四个则是相应的反三角函数,函数值的单位也是弧度。若要求...

C语言中的数学计算方法有哪些?
1、C语言中计算一个数的N次方可以用库函数pow来实现,还可以直接使用2^3就可以算出结果。pow函数原型:double pow(double x,double y)。其中x值是底数,y值是幂。举例:double a=pow(3.14,2)计算3.14的平方。注意:使用pow函数时,需要将头文件#include<math.h>包含进源文件中。2、在C语言...

C语言:从键盘输入一个人简单的数学表达式,计算并显示该表达式的值?_百 ...
我的应该比三楼简捷一些,但是他的挺正规的。我用的dev。这里主函数不能带参数。不知你的是怎样的...include <stdio.h> int main(){ int a,b,c;char o;scanf("%d%c%d",&a&o&b);if(o=='+')c=a+b;else if(o=='-')c=a-b;else if(o=='*')c=a*b;else if(o=='\/')c=...

相似回答