hdu1286!【数学】

找新朋友

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7578    Accepted Submission(s): 3977


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)
 

Recommend
lcy   |   We have carefully selected several similar problems for you:   1215  1406  1164  1787  1211 
#include<stdio.h>
#include<string.h>
int  b[33000],c[33000];
int main()
{
	int i, j, k, l;
	int sum,n, m;
	scanf("%d", &n);
	while(n--)
	{
		scanf("%d", &m);
		k  = 0;
		sum = 0;
		memset(b, 0, sizeof(b));
		for( j = 2; j  <= m/2; j++)//yueshu
		{
			if(m % j == 0)
			c[k++] = j;
		}
		for(j = 0 ;j < k; j++)
		{
			for(l = c[j]; l < m; l += c[j])
			b[l] = 1;
		}
		for(j = 1; j < m; j++)
		if(!b[j])
		sum++;
		printf("%d\n", sum);
	}
	return 0;
}

本以为打表是万能的,结果在这里给跪了。

你可能感兴趣的:(c)