找新朋友
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 53 Accepted Submission(s) : 16
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
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
Author
SmallBeer(CML)
Source
杭电ACM集训队训练赛(VII)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n,i,j,k,count=0;
cin>>n;
int max=int(sqrt(n));
int a[361];//因数不会超过这个范围,用存表的方式避免超时
for(i=2,j=0;i<=max;i++)
{
if(n%i==0)
{
a[j++]=i;
a[j++]=n/i;
}
}
for(i=2;i<n;i++)//循环查表
{
for(k=0;k<j;k++)
{
if(i%a[k]==0)
{
count++;
break;
}
}
}
cout<<n-1-count<<endl;//减去会长 朋友
}
return 0;
}
1594

被折叠的 条评论
为什么被折叠?



