永发信息网

杭电上的题

答案:2  悬赏:60  手机版
解决时间 2021-02-27 20:09
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;
}
超时了 怎么改啊
最佳答案
用筛选法,累死找素数的,不要用公约数暴力,这样肯定超时
#include <iostream>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int *a=new int[n];
for(int i=1;i<n;i++)
a[i]=1;
for (int i=2;i<=n/2;i++)
{
if (n%i==0)
for (int j=1;i*j<n;j++)
a[i*j]=0;
}
int sum=0;
for (int i=1;i<n;i++)
sum+=a[i];
cout<<sum<<endl;
delete a;
}
}
全部回答
百度搜索 猪头帮协会 找新朋友
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
纯白交响曲女猪脚是谁啊啊
海洋中的生物大部分生活在距海平面150米以内
母婴顾问一般在什么时期发送信息给客户
情景教学英语怎么说
我男友说我不是他见过的最好的女生,但是我对
网上又没有什么维修家电的网站
禹卢小区地址在哪,我要去那里办事
干扰素是治疗癌症的重要药物,它必须从血液中
中国银行淮阳支行在什么地方啊,我要过去处理
工程造价定额人工怎么套 在哪里可以查到
一千克=好多公斤’
女朋友说数学不好说在一起没效率
松江妇幼怎么建卡?一定要先建小卡吗?
我想问一下高丽参三年根的什么价钱。
求短篇的言情故事,最好是古代的,谢谢
推荐资讯
红橙现在收购价格多少钱一斤
芒果不能和什么一起吃 芒果搭配禁忌食物
萃取法是将粉碎、干燥的植物原料用有机溶剂浸
清逸茶楼我想知道这个在什么地方
一个三角形的面积是12平方米,高是6米,它的底
在线教育和互联网教育有什么区别
煅牡蛎30 茯苓30 蜜炙甘草12 蜜麸炒白芍12 蜜
沙发的脚弄掉了个修理要多少钱
熟食加盟赚钱吗?
过年正月份银行能贷款吗
空气能热水器外面的一层塑料薄膜要撕掉吗?
内蒙住房公积金电话号码是多少
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?