zoukankan      html  css  js  c++  java
  • poj 1730

    数论唯一分解定理的应用,要注意负数的情况,想明白这个过程用了两个小时,后来因为一个while写成了if有调试了俩小时,为什么还是这么菜

    数论唯一分解定理的应用,要注意负数的情况,想明白这个过程用了两个小时,后来因为一个while写成了if有调试了俩小时,为什么还是这么菜
    #include <iostream>
    #include <cmath>
    using namespace std;
    int gcd(int a,int b)
    {
    	if(b==0) return a;
    	else
    		return gcd(b,a%b);
    }
    int main()
    {
    	long long n;
    	while(cin>>n&&n)
    	{
    		int i,flag1=0;
    		if(n<0)
    		{ 
    			n=-n;
    			flag1=1;
    		}
    		int m=(int)sqrt((double)n);
    		int ngcd=m,tem,t,ans=1,com=n,amount,flag=1;
    		for(i=2;i<=m;i++)
    		{
    			if(n%i==0)
    			{
    				amount=0;
    				while(n%i==0)
    				{
    					n/=i;
    					amount++;
    				}
    				if(flag1)
    				{
    					while(amount%2==0)
    						amount/=2;//得到了本素因子指数能够整除的最大奇数
    				}
    				if(flag) ngcd=amount;
    				else
    				{
    					tem=ngcd;
    				if(tem>amount)
    				{
    					t=tem;
    					tem=amount;
    				    amount=t;
    				}
    				ngcd=(amount,tem);
    				}
    			}
    		}
    		if(n!=1) ngcd=1;//如果经过上面那个循环,n不等于1,说明n还有素因子,且只有一个素因子,并且这个素因子的指数为1,可以通过证明得出,我已经证明过了
    	    cout<<ngcd<<endl;
    	}
    	return 0;
    }
    
    


  • 相关阅读:
    Collections集合工具类排序
    集合的学习
    gitee使用方法
    vue 首屏优化
    vue 配置多个路由别名
    vue中的状态管理Vuex
    【Python】Pandas合并表格之(append, join , concat方法)
    elementui中提交表单自动刷新页面的问题
    滴滴实习面试题
    CSS 日常积累
  • 原文地址:https://www.cnblogs.com/lj030/p/3002301.html
Copyright © 2011-2022 走看看