。◕‿◕。TMD

TimeLimit: 2000/1000 MS (Java/Others)  MenoryLimit: 32768/32768 K (Java/Others)
64-bit integer IO format:%I64d
Problem Description
  LH Boy ,别看他平时TMD(挺萌的),到处卖萌,疯疯癫癫的,然而,他却是一位常年混迹在各大Math论坛上,帮助无数误入迷途的Mather解决了各种难题的大神,然而,最近他遇到了一个很蛋疼的问题。这是一个来自论坛上Mather的难题: 
  设X∈[1~N],存在多少个X使得GCD(X,N)>=M,统计符合要求X的个数。
Input
  第一行输入一个整数 T( T<=100) ,表示有T组测试数据。 
  接下来有T组测试数据,每一组测试数据输入一行。每一行输入两个整数 N和 M (2<=N<=1000000000, 1<=M<=N)。
Output
  对于每一组测试案例,在下一行中输出答案、
SampleInput
3
1 1
10 2
10000 72
SampleOutput
1
6
260
题目大意: 
  第一行输入T,表示有T组数据。然后每一行输入N和M,分别表示所要求数的范围为1~N,比较值为M。
 题目意思很简单,就是求解,在数的范围内X∈[1~N],存在多少个X使得GCD(X,N)>=M,统计X符合要求的个数。
 用膝盖骨想想也知道,如果直接暴力遍历N次,每次操作的复杂度高达10^9,肯定会超时的。常规的方法肯定不行。
 
 ①首先,补充一下关于GCD()的一些基础知识。
  1,如果GCD(a,b)=c,则可以知道GCD(a/c,b/c)=1;(  GCD(a,b)=c  <=>  GCD(a/c,b/c)=1  )
  2,设GCD(a,b)=c,如果想要GCD(a,b*d)=c,用①_1可知,
    只需满足GCD(a/c,(b/c)*d)=1即可(这个限制既为,满足最大公约数的要求).
 
 ②然后,我们所要求的是GCD(X,N)>=M,也就是说我们要求一个GCD(X,N)=Z,的数,
  1,如果M==1,则可以知道在[1,N]中任意数X的GCD(X,N)>=1,所以符合要求的个数为N。
  2,如果M>1,则表示我们需要找一个GCD(X,N)>1的数。这样我们就知道X肯定会是N的除了1以外的约数、
  因为,X只有是N除了1以外的约数,才可能会有GCD(X,N)>1存在。而且,GCD(N,X)=X;(约数嘛,你懂得~)
 
 ③再者,我们需要统计的数符合要求的X的个数呢?
  1,正如②_2可以知道GCD(N,X)=X,能够使得GCD()=X的数不一定只有X本身,说的正确点的应该是GCD(N,X*q)=X,
  只需要计算1~N中有多少个(X*q)即可。但是,q是有受限制的,需要满足上述①_2的要求。
         (比如:GCD(15,5)=5,GCD(15,5*3)=15;)
  2,由①_2可知,要使得GCD(N,X*q)=X,需要满足GCD(N/X,q)=1.也就是统计1~N/X中有多少个数与N/X互质。
   是不是觉得有点熟悉了的?=>求1~N中,有多少个与N互质的数,不就是欧拉函数嘛,SUM+=Eular(N/X);
 ④最后,如何不重复的统计其公约数为符合条件X的数呢?
  其实,你每次用欧拉函数统计出来的那些数,都是唯一的,如上面③_2所说的,q是有受限制的,因为这个限制,使得所求出的个数都为不重复的、所以,只需要统计N的符合要求的约数Xi,SUM+=Eular(N/Xi),既为答案、
 #include <iostream>
 #include <stdio.h>
 #include <string.h>
 using namespace std;
 int Eular(int N)
 {
     ,i;
     ;i*i<=N;i++)
     {
         )
         {
             N/=i;sign*=i-;
             )
             {N/=i;sign*=i;}
         }
     }
     )
     sign*=N-;
     return sign;
 }
 int main()
 {
     int A,B,T,i,sign;
     scanf("%d",&T);
     while(T--)
     {
         scanf("%d%d",&A,&B);
         ,sign=;i*i<=A;i++)/*分解约数*/
            )       /*分解约数,同时判断两边*/
            {           /*如果为平方数则主需要判断一次*/
                 if(i>=B)
                     sign+=Eular(A/i);
                 if((A/i)!=i&&(A/i)>=B)/*判断是否为平方数*/
                     sign+=Eular(i);
            }
         printf("%d\n",sign);/*输出答案*/
     }
     ;
 }

。◕‿◕。TMD的更多相关文章

  1. T^TOJ - 1251 - 。◕‿◕。TMD - 欧拉函数 - 质因数分解

    http://www.fjutacm.com/Problem.jsp?pid=1251 想了很久,一开始居然还直接枚举因子d,计算重复了. 首先你要找与n的最大公因子大于m的x的个数. \[\sum\ ...

  2. 爆料喽!!!开源日志库Logger的使用秘籍

    日志对于开发来说是非常重要的,不管是调试数据查看.bug问题追踪定位.数据信息收集统计,日常工作运行维护等等,都大量的使用到.今天介绍著名开源日志库Logger的使用,库的地址:https://git ...

  3. sublime text 3 如何安装 package control

    sublime text3 是个很好的编辑工具,前端程序员觉得她很好,我是在一次视频中看到她能帮助自动完成很多快捷的操作. 为什么安装? 如果想要给sublime text 中安装别的插件(这里称呼为 ...

  4. html 符号大全

    ░ ▒ ▬ ♦ ◊ ◦ ♠ ♣ ▣ ۰•● ❤ ●•۰► ◄ ▧ ▨ ♨ ◐ ◑ ↔ ↕ ▪ ▫ ☼ ♦ ♧♡♂♀♠♣♥❤☜☞☎☏⊙◎ ☺☻☼▧▨♨◐◑↔↕▪ ▒ ◊◦▣▤▥ ▦▩◘ ◈◇♬♪♩♭♪の ...

  5. iOS:特殊符号大全

    特殊符号大全分享给大家,直接复制粘贴就可以使用了! ░ ▒ ▬ ♦ ◊ ◦ ♠ ♣ ▣ ۰•● ❤ ●•۰ ► ◄ ▧ ▨ ♨ ◐ ◑ ↔ ↕ ▪ ▫ ☼ ♦ ♧♡♂♀♠♣♥❤☜☞☎☏⊙◎ ☺☻☼▧▨ ...

  6. 青少年如何使用 Python 开始游戏开发

    这是一篇由教程团队成员Julian Meyer发表的文章,一个12岁的python开发人员.你可以在Google+和Twitter上找到他. 你可曾想过如何创建视频游戏吗?它不像你想象的那么复杂! 在 ...

  7. WPF 多项选择下拉菜单

    背景 项目中有一个多项选择筛选的功能, 由于筛选条件太多, 用户又习惯在平板上进行操作, 所以要求我们把checkbox 放到一个combobox里面, 然后checkbox的选项要在combobox ...

  8. Ajax异步操作集合啦(阿贾克斯)

    /* * Ajax的核心操作对象是xmlHttpRequest * 简化操作步骤:实例化一个xmlHttpRequest对象 ==> 发送请求 ==> 接受响应 ==> 执行回调 * ...

  9. COJ 3016 WZJ的图论问题

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=1046 试题描述: WZJ又有一个问题想问问大家.WZJ用数据生成器生成了一 ...

随机推荐

  1. Unity3DGUI:Window

    #pragma strictvar winRect:Rect=Rect(30,100,150,200);var windowShow:boolean=true;function OnGUI () { ...

  2. ViewCompat.animate(view) 动画的操作

    ViewCompat.animate(view) 实现动画的操作,动画兼容包; ViewCompat.animate(view) 实现动画的操作 .setDuration(200) .scaleX(0 ...

  3. Scala AOP

    trait Action { def doAction } trait TBeforeAfter extends Action { abstract override def doAction { p ...

  4. appnium框架以及源码研究

    android4.0后,google提供了uiautomator来进行自动化方案,appium在高版本android上就是基于这个,4.0下是基于selendroid. appium相当于一个中转站, ...

  5. mysql 创建用户与授权、修改密码

    mysql版本:5.6.35 1.创建用户 #foo表示你要建立的用户名,后面的123表示密码, #localhost限制在固定地址localhost登陆 CREATE USER foo@localh ...

  6. python下载时报错 Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time

    def downloadXml(isExists,filedir,filename): if not isExists: os.mkdir(filedir) local = os.path.join( ...

  7. 在cmd中连接数据库

    1.进入mysql安装路径的 mysql/bin 目录(即mysqld.exe所在目录) 2.在cmd中输入mysql进入mysql操作环境(mysql -u root -p )链接mysql并输入密 ...

  8. 分布式版本控制系统Git-----2.上传至远程仓库之基础版

    好,之前已经将文档下载下来了,但是我感觉还是将自己之前截的图放出来比较好,自己整理的,但是总不能放桌面上,时间久了也会忘得,索性放到博客上吧,也便于其他人查看,简直是百利而无一害啊.哈哈.来吧. 注意 ...

  9. java变量初始化

    java全局变量会自动初始化,但局部变量不会自动初始化.当我们新建一个对象的时候,java会申请一个区域存放类的数据,而成员变量就是类的数据,也是放在这个内存区域中,jvm申请内存时初始化.而方法中变 ...

  10. CSS兼容的一些问题

    DIV+CSS网页布局这是一种趋势,我也开始顺应这股趋势了,不过在使用DIV+CSS网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV+CSS设计的网页,就应该更注意IE6 ...