这里我们定义 \varphi(n)φ(n) 表示所有小于等于 nn 与 nn 互质数的个数。

例如 \varphi(10) = 4φ(10)=4,因为我们可以在 1 \sim 101∼10 中找到 1,3,7,91,3,7,9 与 1010 互质。

输入格式

第一行输入一个整数 tt,表示测试数据组数。

接下来 tt 行,每行有一个整数 nn。

输出格式

对于每组测试数据输出 \varphi(n)φ(n) 。

数据范围

1 \le t \le 100, 1 \le n \le 10^{10}1≤t≤100,1≤n≤1010。

Sample Input

3
2
10
100

Sample Output

1
4
40

这道题会做但是一个超内存一个超时长。

#include<stdio.h>
int gad(int a,int b){return b==0?a:gad(b,a%b);//与取得最小公倍数很像
}
int main()
{int n,pan;int ans;scanf("%d",&n);for(int i=0;i<n;i++){ans=0;scanf("%d",&pan);for(int j=1;j<pan;j++){if(gad(j,pan)==1){ans++;}}printf("%d\n",ans);}return 0;
}

这个会是时间超限

#include<stdio.h>
#include<math.h>
#include<string.h>
int per(int x,int n);
void huzhi(int n );
void yin(int n);
int ans,a[100000000];
void huzhi(int n){for(int i=2;i<n;i++){if(n%i==0){continue;}else{if(per(i,n)){ans++;}}}
}int per(int x,int n){int m=1;for(int i=2;i<=sqrt(n);i++){if(a[i]>0){if(x%i==0){m=0;}}}return m;
}
void yin(int n){for(int i=2;i<=sqrt(n);i++){if(n%i==0){a[i]++;}}
}
int main()
{int n,pan;scanf("%d",&n);for(int i=0;i<n;i++){ans=1;scanf("%d",&pan);yin(pan);huzhi(pan);printf("%d\n",ans);memset(a,0,sizeof(a));}return 0;
}

没写注释可能很难理解,这是我写的最笨的方法,是空间超限

接下来是我大哥(一个童鞋)写的

#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstdio>
#include<sstream>
#include<bitset>
#include<algorithm>
#include<cctype>
#include<map>
#include<queue>
#include<set>
#include<vector>
#include<functional>
#include<cstring>
#include<stack>
#include<unordered_set>
using namespace std;
typedef long long ll;
ll oula(ll n)
{ll res = n;for (ll i = 2; i <= sqrt(n); i++){if (n % i == 0){res = res / i * (i - 1);while (n % i == 0)n /= i;}}if (n != 1)res = res / n * (n - 1);return res;
}
int main()
{int t;scanf("%d", &t);while (t--){ll n;scanf("%lld", &n);cout << oula(n);cout << '\n';}return 0;
}

H - 互质数的个数(一)相关推荐

  1. 欧拉函数求互质数的个数

    互质数的个数(一) 思路:欧拉函数. 题目链接 import java.util.Scanner;public class Main{public static void main(String[] ...

  2. 欧拉函数互质数的个数

    学习的过程中学到了欧拉函数,做个总结,对数论,对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目,(φ(1)=1)例如φ(8)=4,因为1,3,5,7均和8互质. 互质数的个数 这里我们定义φ ...

  3. 1~n中与n互质数的个数(欧拉函数)

    对于1~n中所有跟n互质的数的个数问题,我们会用欧拉函数来解决. 在开始讲欧拉函数之前,需要先了解质因数分解,传送门:http://t.csdn.cn/tqzvO.ok现在正式开始欧拉函数的推导. 以 ...

  4. c语言用h指针n个数求和,C语言程序经典示例—-(20)寻找指定元素的指针

    #include #define MAX 20 int search(int *apt,/*已知数表的首元指针*/ int n,/*数表中元素个数*/ int key)/*要寻找的值*/ { int ...

  5. 互质数的个数(欧拉函数)C/C++

    欧拉函数 O(n)=n(1-1/P1)(1-1/P2)-(1-1/Pn) ,其中P1-Pn为n的质因子,求出来的结果就是题目所求. 不知道为社么这么写时间超限,下面那种方式写就能过. #include ...

  6. 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-935 互质数个数

    第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-935 互质数个数 目录 第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-935 互质数个数 前言 关于数学的疑问 算法训练 互质数 ...

  7. Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址      内存地址就是指针. ...

  8. 求完全二叉树的结点个数

    第一次见这个题,看时间小于O(N)..... 只能是二分啊. 但是怎么二分,条件是什么,真的想不到. 后来知道了,我们要找最深一层最右边那个结点.借此确定结点个数. 我们知道,满二叉树的结点个数和深度 ...

  9. C语言-附加-给一个数求最大质数(完整代码)

    质数:只能被1 和本身整除的数 第一层循环,从这个数,开始,一次次递减,查找        ----除数 第二层循环,从2开始,到这个数的一半        -------被除数 完整代码 #incl ...

最新文章

  1. Boost::context模块callcc的jump_void测试程序
  2. 合并K个排序链表—leetcode23
  3. ROS Kinectic 安装问题
  4. 云计算到底是怎么玩的?
  5. Idea和redis的坑
  6. php mysql 备份还原_PHP执行Mysql数据库的备份和还原
  7. 马云:捐钱很容易 但当所有人行动才能有变化
  8. 复杂纹理复制及纹理叠加效果
  9. 中国移动的呼叫转移呼叫等待等设置方法 USSD MMI
  10. ssrf漏洞修复(ssrf漏洞修复方式)
  11. 流量、电量、弱网环境怎么测?
  12. vue实现跑马灯抽奖
  13. 示波器播放Bad apple坏苹果教程XY模式
  14. linux veket安装教程,【重写】在U盘上安装使用Veket(Linux)系统
  15. PMP 考试是一个骗局吗?
  16. ECMAScript6
  17. 美团点评暑期实习个人总结
  18. C语言在坐标轴上输出曲线,C语言图形输出习题
  19. 大话设计模式读书笔记之状态模式
  20. C#趣味消消乐小游戏

热门文章

  1. 学习时间管理,就要我们吃青蛙!这是什么梗?
  2. Arm-Trusted-Firmware代码分析
  3. 超实用~使用 Xcode 编译 Swift 源码
  4. Excel透视表之多表关联
  5. leetcode之青蛙过河(C++)
  6. 长图预警,全网最全的23个免费无背景PNG素材网站汇总,让你有用不完的资源!!
  7. AdFly一个可以赚钱的短链接网站
  8. Steem夺权告一段落,谁是最后赢家? | 一周问答热议
  9. 在 Visual Basic .NET 和 Visual C# .NET 中创建控件数组
  10. 华为nova3e支持鸿蒙系统吗,华为nova 3e值不值得买?HUAWEI nova 3e深度体验评测