一道简单的ACM题,总是超时,各位大侠帮忙看看如何改进。

http://acm.hrbeu.edu.cn/index.php?act=problem&id=1007

我的代码:
#include<iostream>
using namespace std;
int gcd(int m,int n)
{
if(m%n==0)
return n;
else
return gcd(n,m%n);
}
int main()
{
int n;
while(cin>>n)
{
int i,s=0;
if(n==0)
break;
for(i=1;i<n;i++)
if(gcd(n,i)==1)
s++;
cout<<s<<endl;
}
return 0;
}

其实很简单 不要暴搜 会超时 首先将n因式分解 只需将那些不与其质因子互质的数目加起来就行 求于一个质因子互质貌似不难吧 比如49内与不与7互质的数48/7=6;然后加起来用n减去不与n互质的数就是结果了追问

如何判断一个因子为质因子?
题外话:哥们你大几的,思维怎么这么灵活?

追答

打一个素数表 一万以内的应该足够了

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-03
#include<iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
int i,t=n,m=n,j=0;
for(i=2;i<=t;i++)
while(t%i==0)
{
t=t/i;
if(i!=j)
{
m=m/i*(i-1);
j=i;
}
}
printf("%d\n",m);
}
return 0;
}
第2个回答  2011-06-02
5464532463456345645654
第3个回答  2011-06-03
//2021 Accepted 252K 16MS C++ 1193B
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct person
{
char fname[50];
char cname[50];
int fage;
};

vector<person> v,v3;

bool cmp(person a,person b)
{
if(a.fage==b.fage)
return strcmp(a.cname,b.cname)<0;
else
return a.fage>b.fage;
}

void fun(char ch[50],int t,int x)
{
int i;
vector<person> v1;
person p;
for (i=0;i<x;i++)
{
if(!strcmp(v[i].fname,ch))
{
strcpy(p.fname,v[i].fname);
strcpy(p.cname,v[i].cname);
p.fage=t-v[i].fage;
v1.push_back(p);
v3.push_back(p);
}
}
for (i=0;i<v1.size();i++)
{
fun(v1[i].cname,v1[i].fage,x);
}
}

int main()
{
person p;
char curname[50];
strcpy(curname,"Ted");
int i,t,x,k=1;
freopen("2021.txt","r",stdin);
cin>>t;
while (t>0)
{
cin>>x;
for (i=0;i<x;i++)
{
cin>>p.fname>>p.cname>>p.fage;
v.push_back(p);
}
cout<<"DATASET "<<k<<endl;
k++;
fun(curname,100,x);
sort(v3.begin(),v3.end(),cmp);
for (i=0;i<v3.size();i++)
{
cout<<v3[i].cname<<" "<<v3[i].fage<<endl;
}
v3.clear();
v.clear();
t--;
}
fclose(stdin);
return 0;
}

杭电1051题,为啥WA,求各位大侠们帮忙题目链接http:\/\/acm.hdu.edu.cn\/...
using namespace std;struct stick { int l;int w;}sticks[5001];int cmp( const void *a , const void *b ){ struct stick *c =(stick *)a;struct stick *d =(stick *)b;if(c->l!=d->l)return c->l-d->l;else return c->w-d->w;} int main(){ int ri,repeat,i,j...

各位大侠帮忙看看摆件怎么样
1、布局上有不足。红黄两部分相互独立,没有整体美感。再者你这件作品的中心看起来是“珠”,而视觉中心却是黄龙的头,再加上红龙整体太靠近边沿,感觉主体涣散,没有神。2、形态上,黄龙看着像断成两节。红龙尾巴好像是弄在背面,而背面基本没有雕工,要么再多加内容,要么干脆只放一些云彩在上面,...

...办公系统,经常被黑,请问该如何给服务器做安全,求各位大侠帮忙...
1.修改帐号密码 不管是商业或不是,初始密码多半都是admin。因此你接到网站程序第一件事情就是“修改帐号密码”。帐号 密码就不要在使用以前你习惯的,换点特别的。尽量将字母数字及符号一起。此外密码最好超过15位。尚若你使用 SQL的话应该使用特别点的帐号密码,不要在使用什么什么admin之类,否则很...

各位大侠帮我看看我的DNF元素加点需要改进的地方
首先不知道你是PK加点还是刷图加点,刷图加点的话火焰冲击1就够了,看你雪人加到10说明你是冰暗流加点,冰墙就到5吧,雷旋要1.落花就不要了,书也不要了,替身稻草人1级,黑球一直加满,舒露露要加就加高,要么就不加,1级上去一下就死了,完全没有牵制怪的作用。魔法记忆和移动施法要随级加,...

我在云南地矿局买了个翡翠吊坠3000多,,麻烦各位大侠帮忙看看是不...
1. 关于您购买的翡翠吊坠是否物有所值,需要看到实物才能准确判断其价格是否合理。翡翠通常具有保值和升值的特点,所以只要确认其为真品,长期来看应该不会贬值。尽管可能存在一些购买时的溢价,但随着时间的推移,其价值有可能逐渐回归甚至升值,这样想或许能为您带来一些安慰。2. 根据您提供的描述,如果该...

各位大侠,帮忙看看咱电脑开机总是出现这画面。 但是进入系统后都能正常...
开机按del键,看看启动中是不是会出现,如果会是主机或者显示器问题,重启显示器尝试,如果重启显示器正常估计是显卡或者主板,如果重启显示器也显示一会在正常是显示器问题。 如果启动中没有出现是系统问题。

各位大侠,快出手了,实在不懂,帮忙看看配置,多谢!!
有钱的话显卡直接上8800好了,如果钱紧一点,我还是建议配8600的卡好,内存建议两根800的,价钱基本差不多啊,显示屏的话不推荐三星,个人比较推荐飞利浦或者是AOC的

各位大侠!麻烦帮忙看看这是个什么昆虫?家里经常出现,把...
各位大侠!麻烦帮忙看看这是个什么昆虫?家里经常出现,把孩子也吓坏了!什么环境出现这个东东?感谢各位蜚蠊(蟑螂)泛指属于蜚蠊目(Blattodea)的昆虫,目前已被发现大约有4000多种。蟑螂是这个星球上最古老的昆

...viedo cable 是什么意思?请各位大侠帮忙解决,谢谢!
开机总出现xvidcore.dllnotfound如何解决请各位大侠帮忙!谢谢。 开始-运行,输入regsvr32.exe \/u xvidcore.dll 重启 电脑开机时总出现“与内核通信时出错”是什么意思啊?怎么解决呢,谢谢。 我也出现过这种情况,安装了nod32杀毒软件,由于病毒把杀毒软件搞掉了,杀软的服务项无法启动造成的 电脑...

...请各位大侠帮帮忙,看看是不是硬盘或者其他硬件的问题,3Q
一、0X0000000A 这个蓝屏代码和硬件无关,是驱动和软件有冲突造成的,最早发现这个代码是因为公司的DELL机器的USB键盘和QQ2007的键盘加密程序有冲突发现的这个问题。也在IBM T系列笔记本上装驱动失误产生过。如果您的机器蓝屏了,而且每次都是这个代码请想一想最近是不是更新了什么软件或者什么驱动了,把它...

相似回答
大家正在搜