Prime Land

来源:互联网 发布:python 量化交易策略 编辑:程序博客网 时间:2024/05/17 02:19

题目链接:     点击打开链接


  

题目看不懂,其实就是个水题。。。。。。

以后还是要自己看题了,少用翻译;(反正翻译用处也不大)


题意:我们直接看样例吧: 1: x=17^1    2: x=5^1*2^1    3: x= 509^1*59^1

然后我们要求的是:  x-1  用唯一分解定理得出的结果 



#include<cstdio>#include<iostream>#include<cmath>#include<vector>#include<cstring>using namespace std;const int maxn= 32767   ;bool vis[maxn+5];void init(){    for(int i=2;i*i<=maxn;i++)  if( !vis[i] )//    {        for(int j=i*i;j<=maxn;j+=i)        {            vis[j]=1;        }    }}void div(long long x){    bool has=0;    for(int i=maxn;i>=2&& x!=1;i--)  if(!vis[i])    {        int cnt=0;        while( x%i==0 )        {            cnt++;            x/=i;        }        if(cnt)        {            if(has)  putchar(' ');            has=1;            printf("%d %d",i,cnt);        }    }    putchar('\n');}char s[1000000];int n;int getnum(int k){int sum=0;while(k<n&&s[k]>='0'&&s[k]<='9'){sum=sum*10+s[k]-'0',s[k]=' ',k++;}return sum;}long long POW(int x,int n){long long k=1;while(n>=1){if(n%2)k*=x;x*=x;n/=2;}return k;}vector<int>m;int main(){init();while(gets(s)!=NULL){m.clear();if(s[0]=='0')break;n=strlen(s);//puts(s);vector<int>a;for(int i=0;i<n;i++){if(s[i]>='0'&&s[i]<='9')a.push_back(getnum(i));}long long  sum=1;for(int i=1;i<a.size();i+=2){sum*=POW(a[i-1],a[i]);}sum--;div(sum);}return 0;}





唯一分解定理 的模板:


const int maxn= 32767;bool vis[maxn+5];void init(){    for(int i=2;i*i<=maxn;i++)          if( !vis[i] )        {            for(int j=i*i;j<=maxn;j+=i)            {                vis[j]=1;            }        }}void div(long long x){    bool has=0;    for(int i=maxn;i>=2&& x!=1;i--)  if(!vis[i])    {        int cnt=0;        while( x%i==0 )        {            cnt++;            x/=i;        }               /*if(cnt)        {            if(has)  putchar(' ');            has=1;            printf("%d %d",i,cnt);        }    }    putchar('\n');*/}













原创粉丝点击