Prime Land
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 2122 | Accepted: 979 |
Description
Input
Output
Sample Input
17 1 5 1 2 1 509 1 59 1 0
Sample Output
2 4 3 2 13 1 11 1 7 1 5 1 3 1 2 1
题意:sum=(x1^n1)*(x2^n2)......(xn^nn) 求sum-1的因式分解
通过这道题学会了sscanf将字符窜转换成数字
sscanf(str,"%d",&t);//str是字符窜,t要赋予地址
还有个strtok,这个函数不错以后可以用的着
http://www.cppblog.com/masiyou/archive/2009/10/07/98038.html
#include <string.h> #include <stdio.h> int main(void) { char input[16] = "abc,dhh,eee"; char *p; /* strtok places a NULL terminator in front of the token, if found */ p = strtok(input, ","); if (p) printf("%s\n", p); /* A second call to strtok using a NULL as the first parameter returns a pointer to the character following the token */ p = strtok(NULL, ","); if (p) printf("%s\n", p); p = strtok(NULL, ","); if (p) printf("%s\n", p); return 0; }
#include <stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; const int MAXN=40000; struct Node { int a,b; }rem[1000]; char ss[1000]; int prime[MAXN],num[1000],vis[MAXN]; char str[1000]; int cnt,tes; void init() { int i,j; tes=0; memset(vis,0,sizeof(vis)); for(i=2; i<MAXN; i++) { if(vis[i]==0) { for(j=i+i; j<MAXN; j+=i) { vis[j]=1; } } } tes=0; for(i=2; i<MAXN; i++) { if(vis[i]==0) prime[tes++]=i; } } void get_num() { int tot,i; cnt=tot=0; int t; for(i=0; ss[i]; i++) { if(ss[i]==' ') { str[tot]='\0'; sscanf(str,"%d",&t); num[cnt++]=t; tot=0; } else str[tot++]=ss[i]; } } bool cmp(Node a,Node b) { return a.a>b.a; } int main() { int i,ans,cas,flag,cot; init(); while(gets(ss)) { flag=0; if(ss[0]=='0') break; int len=strlen(ss); ss[len]=' '; ss[len+1]='\0'; get_num(); ans=1; for(i=0; i<cnt; i+=2) { ans*=pow(num[i],num[i+1]); } ans-=1; cot=0; for(i=0; i<tes; i++) { if(ans==1) break; if(ans%prime[i]==0) { rem[cot].a=prime[i]; } cas=0; while(ans%prime[i]==0) { cas++; ans/=prime[i]; } if(cas) rem[cot++].b=cas; } sort(rem,rem+cot,cmp); for(i=0;i<cot;i++) { if(i==0)printf("%d %d",rem[i].a,rem[i].b); else printf(" %d %d",rem[i].a,rem[i].b); } printf("\n"); } return 0; }