巴蜀2904 MMT数

Description

  FF博士最近在研究MMT数。
  如果对于一个数n,存在gcd(n,x)<>1并且n mod x<>0 那么x叫做n的MMT数,显然这样的数可以有无限个。
  FF博士现在想知道在所有小于n的正整数里面有多少个n的MMT数。

Input

  仅一行一个数为n。

Output

  输出所有小于n的正整数里面有多少个n的MMT数。

Sample Input

10

Sample Output

3

Hint

【样例解释】
    3个数分别是 4 6 8,gcd(n,x)的意思是求n和x的最大公约数。
【数据范围】
  对于50%的数据 n<=1000000
  对于100%的数据n<=maxlongint

Source

xinyue

总数减去欧拉函数,再减去因数的数量,再加上被多减了一次的1,就是答案。

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 int n,m;
 9 int solve(int x){
10     int res=x;//欧拉函数
11     int cnt=1;//因数
12     for(int i=2;i*i<n;i++){
13         if(x%i)continue;
14         res=res/i*(i-1);
15         int c=0;
16         while(x%i==0){
17             x/=i;
18             c++;
19         }
20         cnt*=c+1;
21     }
22     if(x>1){
23         cnt*=2;
24         res=res/x*(x-1);
25     }
26     return res+cnt;
27 }
28 int main(){
29     scanf("%d",&n);
30     solve(n);
31     printf("%d\n",n-solve(n)+1);
32     return 0;
33 }
时间: 2024-12-01 04:36:45

巴蜀2904 MMT数的相关文章

tyvjP1346 MMT数

tyvjP1346 MMT数 描述 FF博士最近在研究MMT数(莫明堂数-_-).如果对于一个数n,存在gcd(n,x)<>1并且n mod x<>0 那么x叫做n的MMT数显然这样的数可以有无限个.FF博士现在想知道在所有小于n的正整数里面有多少个n的MMT数 输入格式 仅一行一个数,为n 输出格式 所有小于n的正整数里面有多少个n的MMT数 测试样例1 输入 10 输出 3 备注 样例解释: 3个数分别是 4 6 8 gcd(n,x)的意思是求n和x的最大公约数 对于50%的数

巴蜀1088 Antiprime数

Description 如果一个自然数n(n>=1),满足所有小于n的自然数(>=1)的约数个数都小于n的约数个数,则n是一个Antiprime数.譬如:1, 2, 4, 6, 12, 24. 任务:编一个程序: 1.从ANT.IN中读入自然数n. 2.计算不大于n的最大Antiprime数. 3.将结果输出到ANT.OUT中. Input 输入只有一个整数,n(1 <= n <= 2 000 000 000). Output 输出只包含一个整数,即不大于n的最大Antiprime

【蓝桥杯】历届试题 连号区间数(运行超时)

  历届试题 连号区间数   时间限制:1.0s   内存限制:256.0MB 问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间. 当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助. 输入格式 第一行是一个正整数N (1 <=

从文件读入16进制数转化为10进制数再输出到文件中

sSN LMDscandata 1 1 B98C27 0 0 85C0 85C3 F55D73C5 F55DCC81 0 0 7 0 0 1388 168 0 1 DIST1 3F800000 00000000 DBBA0 1388 B5 136C 1373 136B 1389 1398 1356 136D 1386 137B 139C 13C4 13F7 1531 174D 1751 1755 1765 176C 1777 177B 1784 1791 1796 17A8 17C0 17C6

【noip2003】 麦森数

题目描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有909526位.麦森数有许多重要应用,它与完全数密切相关. 任务:从文件中输入P(1000<P<3100000),计算2P-1的位数和最后500位数字(用十进制高精度数表示) 输入 文件中只包含一个整数P(1000<P<3100000) 输出 第一行:十进制高精度数2P-1的位数. 第2

CCF - 201409-1 - 相邻数对

问题描述 试题编号: 201409-1 试题名称: 相邻数对 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个整数,表示值正好相差1的数对的个数. 样例输入 610 2 6 3 7 8 样例输出 3 样例说明 值正好相差1的数对包括(2, 3), (6, 7), (7, 8). 评测用例规模与约定 1

java实现求一个数组里最大值和最小值之前缺省的数的算法

问题描述: 求一个数组里最大值和最小值之间缺省的数,例如 int arrDemo = {1, 3, 7};  那么就要输出最小值1和最大值7之间缺少的数字2,4,5,6 代码如下,有更好的思路欢迎大家在评论区留言讨论 1 package test; 2 3 public class Test { 4 5 static int[] array = { 6 -10,0,3,3,9 7 }; 8 9 private static void printEmptyItems(int[] array) {

1082 与7无关的数

1082 与7无关的数 题目来源: 有道难题 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7,则称其为与7相关的数.求所有小于等于N的与7无关的正整数的平方和. 例如:N = 8,<= 8与7无关的数包括:1 2 3 4 5 6 8,平方和为:155. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 1000) 第2 - T + 1行

Humble Numbers(丑数) 超详解!

给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑数为 h[n]. 算法 1: 一种最容易想到的方法当然就是从 2 开始一个一个的判断一个数是否为丑数.这种方法的复杂度约为 O( k * h[n]),铁定超时(如果你这样做而没有超时,请跟 tenshi 联系) 算法 2: 看来只有一个一个地主动生成丑数了 : 我最早做这题的时候,用的是一种比较烂的