HDU 1286 找新朋友

来源:互联网 发布:网络语偷猪是什么意思 编辑:程序博客网 时间:2024/05/22 04:44

Description

新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来。

Input

第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数N(1<n<32768),表示会员人数。

Output

对于每一个N,输出一行新朋友的人数,这样共有CN行输出。 

Sample Input

22560824027

Sample Output

7680

16016

板子题

#include<set>#include<map>#include<ctime>#include<cmath>#include<stack>#include<queue>#include<bitset>#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<algorithm>#include<functional>#define rep(i,j,k) for (int i = j; i <= k; i++)#define per(i,j,k) for (int i = j; i >= k; i--)#define loop(i,j,k) for (int i = j;i != -1; i = k[i])#define lson x << 1, l, mid#define rson x << 1 | 1, mid + 1, r#define ff first#define ss second#define mp(i,j) make_pair(i,j)#define pb push_back#define pii pair<int,LL>#define inone(x) scanf("%d", &x);#define intwo(x,y) scanf("%d%d", &x, &y);using namespace std;typedef unsigned long long LL;const int low(int x) { return x&-x; }const double eps = 1e-4;const int INF = 0x7FFFFFFF;const int mod = 1e9 + 7;const int N = 1e5 + 10;int T, n;int f[N], p[N], phi[N], t = 0;void init(){phi[1] = f[1] = 1;rep(i, 2, N - 1){if (!f[i]) p[t++] = i, phi[i] = i - 1;for (int j = 0, k; j < t&&p[j] * i < N; j++){f[k = p[j] * i] = 1;phi[k] = phi[i] * (p[j] - 1);if (i%p[j] == 0) { phi[k] = phi[i] * p[j]; break; }}}}int main(){init();inone(T);while (T--){inone(n);printf("%d\n", phi[n]);}return 0;}


0 0
原创粉丝点击