标签:
原题链接:点击此处
题意:
思路:
#include <iostream> #include <stdio.h> #include <math.h> #include <vector> #include <queue> #include <string> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> using namespace std; int euler(int n)//欧拉公式 { int res=n; for(int i=2;i*i<=n;i++) { if(n%i==0) { res -= res/i; while(n%i==0) n/=i; } } if(n>1) res-=res/n; return res; } int main() { int t; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); int ans=0; for(int i=1;i*i<=n;i++) { if(n%i==0) { if(i>=m)ans+=euler(n/i); //计算sqrt(n)左边的 if(n/i>=m&&i*i!=n) ans+=euler(i);//计算sqrt(n)右边的i*i==n时,在上个语句已经执行 } } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/gdvxfgv/p/5744203.html