求最小公倍数 初等数



杭电上diy上一道很有意思的题
描述:
在学习完各类算法之后,yuna决定开始学习数论了。yuna神当然从最简单的最小公倍数学起喽~~~~~
定义 为1,2,…,n的最小公倍数,例如,B1 = 1,B2 = 2,B3 = 6,B4 = 12,B5 = 60,……。 
yuna想知道对于给出的任意整数n,Bn是否等于Bn-1。yuna当然是知道答案的喽,但是她想考考rexdf,这次rexdf囧了,请帮帮他吧!

Input

本题有多组测试数据,输入的第一行是一个整数T代表着测试数据的数量,接下来是T组测试数据。 
对于每组测试数据:包含一个整数n (2 ≤ n ≤ 1016)。

Output

对于每组测试数据: 
第1行 如果Bn等于Bn-1则输出YES否则输出NO。

Sample Input

1 
6

Sample Output

YES

Author

Kuangbin

Source

developing schools contest 5

算法 :这样考虑:例如 10 那么他前面有9个数,B9的最小公倍数能被2和5整除 那么他一定能被10整除,所以B9和B10是一样的。
但是按照此方法要注意 的是16 前面有15个数,分解成2,8  4,4 两个相同的4是不成立的,应为8是2*2*2 包含了2 所以 2和8也是不成立的,所以前16和前15的最小公倍数不同。

post code:
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int ji;
 __int64 num;
int judge()         //判断质数
{
  int i;
  ji=(int)sqrt((double)num);
  for(i=2;i<=ji+1;i++)
  {

  if(num%i==0)break;
  }
  if(i==ji+2)return 1;
  else return 0;


}

int main()
{
 int n,flag,i;

 cin>>n;
  while(n--)
  {
   scanf("%I64d",&num);
   flag=judge();         //判断是否是质数 是质数 则不相同
   if(flag==1){cout<<"NO"<<endl;continue;}
   else{
     for(i=2;i<=2*ji;i++)
     {
      if(num%i==0&&i<(num/i)&&(num/i)%i!=0) //若不是质数 被两个数整除 且两个数不等,一个数不是另一个数的约数 成立
        {printf("YES\n");flag=1;break;} 
        
     }
     if(flag==0)printf("NO\n");  //否则不成立
   }



  }
  return 0;
}



评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值