题目 题意: 给定数x和d,求是否存在至少两种方法使得x为several个beautiful数的乘积。(可以仅一个数,也可以2、3个数这样的) defination good: 一个数是d的倍数 beautiful: 一个数是good,且不是(dd)的倍数 思路: 可以用根号n的复杂度冲过去,只有100组测试样例。而且剪枝以后实际达不到根号n。具体做法就是递归的进行试除法,当因子满足是beautiful,就除以该因子,直到当前数满足是beautiful,方案数++。因为一个数是beautiful,说明是d的倍数,但不是dd的倍数,说明他的因子里至多一个d因子,无须接着试除了,除了也不会有满足条件的。 时间复杂度: O(T*根号n) 代码:
// Problem: D. Madoka and the Best School in Russia
// Contest: Codeforces - Codeforces Round #777 (Div. 2)
// URL: https://codeforces.com/contest/1647/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define OldTomato ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
#define fir(i,a,b) for(int i=a;i=2) return;
if(x%m==0&&x%(m*m))
{
ans++;
return ;
}
for(int i=st;i*i= 2) puts("YES");
else puts("NO");
}
signed main(void)
{
T = 1;
// OldTomato; cin>>T;
read(T);
while(T--)
{
solve();
}
return 0;
}