标签:main 测试 编程 公约数 img log 计算 题目 height
Input第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数N(1<n<32768),表示会员人数。Output对于每一个N,输出一行新朋友的人数,这样共有CN行输出。
Sample Input
2
25608
24027
Sample Output
7680
16016
题目大意 : 求从1——n互质的个数是多少?
题目分析 : 正好欧拉函数正是用于求1——n的只质数个数的,所以我们直接利用欧拉函数的公式和性质即可。
题目收获 : 欧拉函数的定义和解决类型问题,质因数的定义。
简单阐述欧拉函数和质因数的定义:
在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。例如φ(8)=4,因为1,3,5,7均和8互质。(现在懂得不多,之后补上);
一般解题用到的公式通式:
p1,p2,p3....,pn是与x的所有质因数,那我们就又要来解释下什么是质因数了。
质因数( 素因数或 质因子)在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为 互质。比如1本身是不存在质因子的,但它又可以做
其它数的质因子。2,4,8都只有一个质因子,6有两个质因子2,3
质因数就是一个数的 约数,并且是 质数,比如8=2×2×2,2就是8的质因数。
代码 :
#include <iostream>
#include <set>
using namespace std;
int eular(int x)
{
int res = x;
for (int i = 2; i < (int)sqrt(x *1.0) + 1; i++)
{
if (x % i == 0)//i是否为质因子
{
res = res / i * (i - 1);
while (x % i == 0)//求不同的质因子
x /= i;
}
}
if (x > 1)//本身是质数的情况。
res = res / x * (x - 1);
return res;
}
int main()
{
int T;
cin >> T;
while (T--)
{
int a;
cin >> a;
cout << eular(a) << endl;
}
return 0;
}
标签:main 测试 编程 公约数 img log 计算 题目 height
原文地址:http://www.cnblogs.com/7750-13/p/7281137.html