一道小小的ACM题,用C或者C++写,提交老是说超时,求高人指点迷津

源码:#include"stdio.h"intmain(){intn,i=0;scanf("%d",&n);while(n){intj,a=1;intt=n;fo... 源码:#include "stdio.h"int main(){ int n,i = 0; scanf("%d",&n); while(n) { int j,a = 1; int t = n; for(j = 2;j < n;j++) if(t % j == 0) { t= t / j; a= a * (j - 1); } if(a == 1) a = t - 1; else a =a * t; printf("%d\n",a); scanf("%d",&n); } return 0;}原题:LK的数学题时间限制:1000 ms | 内存限制:65535 KB难度:3描述 LK最近遇到一个问题,需要你帮她一下。一个整数n,求[1,n)中,和n互素的数的个数。输入 多组测试数据,每一行有一个整数n(n<1000000001),0表示输入结束。输出 小于n同时和n互素的整数的个数样例输入 7 12 0样例输出 6 4 展开
 我来答
星野泪只来0Q
2012-04-03 · TA获得超过433个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:340万
展开全部
造成超时可能是因为你每次都是读取一个数然后输出一个结果。这可能和测试系统的输入输出连接矛盾。
试试找个数组将所有输入全部读进来,存放在里面,然后再一个一个计算输出。就是先统一输入,然后统一输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
imininim
2012-04-03
知道答主
回答量:9
采纳率:0%
帮助的人:6.6万
展开全部
#include "stdio.h"
#include<math.h>
int main()
{
__int64 n,i = 0;
scanf("%I64dd",&n);
while(n)
{
__int64 j,a = 1;
__int64 t=n,m = (__int64)sqrt((double)n);
for(j = 2;j <= m;j++)
if(t % j == 0)
{
t= t / j;
a= a * (j - 1);
}
if(a == 1)
a = t - 1;
else
a =a * t;
printf("%I64d\n",a);
scanf("%I64d",&n);
}
return 0;
}
试试这个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式