查看: 1655|回復: 0
打印 上一主題 下一主題

[TIOJ] [數學]1615 - A! + B! problem

[複製鏈接]
  • TA的每日心情
    慵懶
    2015-2-12 11:21
  • 簽到天數: 2 天

    [LV.1]初來乍到

    18

    主題

    31

    帖子

    211

    積分

    好好學生

    Rank: 3Rank: 3

    積分
    211
    跳轉到指定樓層
    樓主
    發表於 2015-2-9 14:26:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x
    本帖最後由 Shaymin 於 2015-2-9 14:26 編輯

    原題:http://tioj.ck.tp.edu.tw/problems/1615
    AC:http://tioj.ck.tp.edu.tw/submissions/9034

    [tex]A%21+B%21%3DA%21%281+%28A+1%29%28A+2%29......B%29[/tex],[tex]A![/tex]的質因數就是小於[tex]A[/tex]的質數個數,重點在後面那一大坨東西有多少質因數。此時根據題目的另一個條件[tex]max%28A%21%2C%20B%21%29%20/%20min%28A%21%2C%20B%21%29%20%5Cleq%201000000000000[/tex],發現該數開根號為[tex]10^6[/tex],於是枚舉所有小於根號那陀的質數來除,最後判斷那陀是不是質數就差不多了



    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    typedef long long ll;
    #define MAX 1000001
    bool isnp[MAX]={true,true,false};
    int dp[MAX]={0};
    vector<int> prime;
    int main()
    {
    	int A=2,B,ans;
    	while(A<1001)
    	{
    		if(!isnp[A])
    		{
    			B=A*A;
    			while(B<MAX)
    			{
    				isnp[B]=true;
    				B+=A;
    			}
    		}
    		++A;
    	}
    	for(int i=1;i<MAX;++i)
    	{
    		dp[i] = dp[i-1];;
    		if(!isnp[i])
    		{
    			dp[i]++;
    			prime.push_back(i);
    		}
    	}
    	/*
    	A! = 1*2*3*..*A
    	B! = 1*2*3*..*A*...B
    	A!+B! = A!(1+(A+1)*(A+2)*...B)
    	(1+(A+1)*(A+2)*...B) is prime? 
    	*/
    	while(cin>>A>>B)
    	{
    		if(A>B)swap(A,B);
    		ans=dp[A];
    		ll left = 1;
    		for(ll i=A+1;i<=B;++i)
    			left=left*i;
    		++left;
    		for(int i=0; i<prime.size() && prime[i]<=A ;++i)
    		{
    			while( left % prime[i] ==0 )left/=prime[i];
    		}
    		for(int c:prime)
    		{
    			if( left%c ==0 )
    			{
    				ans++;
    				while( left%c ==0 )left/=c;
    			}
    		}
    		if(left>1)ans++;
    		cout<<ans<<'\n';
    	}
    }

    回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表